ความเท่าเทียมกันในผลรวมของตัวเลข


23

บทนำ

180ลองมาจำนวน นี่เป็นตัวเลขที่น่าสนใจเพราะผลรวมของตัวเลขของจำนวนนี้เท่ากับ:

1 + 8 + 0 = 9

และเลขยกกำลังสองของตัวเลขนี้หรือ:

180² = 32400 > 3 + 2 + 4 + 0 + 0 = 9

เหล่านี้มีทั้ง9 ผลรวมของตัวเลขของหมายเลขเดิมและหมายเลขกำลังสองเหมือนกัน ของหลักสูตรนี้ยังพบที่ OEIS: A058369

งาน

ให้เป็นจำนวนเต็มไม่ลบnส่งออกจำนวนบวกn th กับเงื่อนไขนี้

กรณีทดสอบ ( ไม่มีดัชนี )

Input > Output

0 > 1
1 > 9
2 > 10
3 > 18
4 > 19
5 > 45
6 > 46
7 > 55
8 > 90
9 > 99
10 > 100
11 > 145
12 > 180
13 > 189
14 > 190
15 > 198
16 > 199
17 > 289
18 > 351
19 > 361

อินพุตยังสามารถจัดทำดัชนี 1 รายการหากเหมาะกับคุณดีกว่า

นี่คือดังนั้นการส่งที่มีจำนวนไบต์น้อยที่สุดจะชนะ!


ในกรณีที่ไม่มีใครเห็นมันจะมีเพียงตัวเลขที่เทียบเท่ากับ 0 หรือ 1 (mod 9) เท่านั้นที่สามารถปรากฏในรายการ
Neil

@MamaFunRoll อืม ... ไม่ ขอโทษ ตัวเลขที่มีรากดิจิตอล 5 มีกำลังสองซึ่งรากดิจิตอลคือ 7
Neil

@Neil owait nvm
Mama Fun Roll

ฉันเขียนคำกริยา Brachylog เพื่อตรวจสอบว่าอินพุตเป็นคำศัพท์ของลำดับนี้หรือไม่ แต่ไม่สามารถทำให้สำเร็จรูปที่ค้นหาได้ดังนั้นฉันจะทิ้งไว้ในความคิดเห็น:^₂;?{ẹ+}ᵛ
สตริงที่ไม่เกี่ยวข้อง

คำตอบ:


5

เยลลี่ขนาด 13 ไบต์

,²DS€=/
1dz#Ṫ

อินพุตถูกสร้างดัชนี 1 ลองออนไลน์!

มันทำงานอย่างไร

1dz#Ṫ    Main link. Argument: n (index)

1        Set the return value to 1.
   #     Execute ... until ... matches have been found.
 Ç         the helper link
  ³        n
    Ṫ    Extract the last match.


,²DS€=/  Helper link. Argument: k (integer)

,²       Pair k with k².
  D      Convert each to decimal.
   S€    Compute the sum of each list of base 10 digits.
     =/  Reduce by equality.

4

Haskell, 54 ไบต์

s=sum.map(read.pure).show
([x|x<-[1..],s x==s(x^2)]!!)

ตัวอย่างการใช้งาน: ->([x|x<-[1..],s x==s(x^2)]!!) 17289

s calculates the digit sum:

                    show     -- turn number into a string
     map(read.pure)          -- turn every character (the digits) in to a
                             -- one element string and convert back to integer
sum                          -- sum those integers

main function:

[x|x<-[1..]            ]     -- make a list of all x starting from 1
           ,s x==s(x^2)      -- where s x == s (x^2)
                        !!   -- pick nth element from that list

4

JavaScript (ES6), 76 73 72 ไบต์

n=>eval("for(q=s=>eval([...s+''].join`+`),i=1;q(i)!=q(i*i)||n--;i++);i")

ฉันใช้เวลา 30 นาทีในการพยายามทำให้มันทำงานจนกว่าฉันจะรู้ตัวว่าฉันกำลังแสดงตัวแปรผิด: |

นี่คือดัชนีที่ศูนย์


1
ฉันรู้สึกว่าการเปลี่ยนสิ่งนี้เป็นฟังก์ชั่นแบบเรียกซ้ำจะทำให้สิ่งนี้สั้นลงมาก ...
Mama Fun Roll


4

05AB1E , 10 9 8 ไบต์

µNÐn‚1öË

1 การจัดทำดัชนี

-1 ไบต์ขอบคุณ@Emignaโดยลบนัย½(เพิ่มcounter_variableทุกครั้งหลังจากการซ้ำ) ในตอนท้าย
-1 ไบต์ขอบคุณ@Grimyลบซ้ำSOโดยใช้‚1ö

ลองออนไลน์

คำอธิบาย:

µ         # Loop while the counter_variable is not equal to the (implicit) input yet:
 NÐ       #  Push the 0-based loop index three times
   n      #  Take the square of this index
          #   i.e. 180 → 32400
         #  Pair it with the index
          #   i.e. 180 and 32400 → [180,32400]
     1ö   #  Convert both numbers from base-1 to base-10, which basically sums the digits
          #   i.e. [180,32400] → [9,9]
       Ë  #  Check if both sums are equal
          #   i.e. [9,9] → 1 (truthy)
          #  (if they are: implicitly increase the counter_variable by 1)
          # (after the loop: implicitly print the top of the stack, which is the remaining
          #  copy of the index from the triplicate we've used)

2
คุณไม่ต้องการ½ที่นี่เพราะมันเป็นนัย
Emigna

1
µNDn‚1öË-1: เป็นเหมือนSOvectorizes ซึ่งช่วยให้เราหลีกเลี่ยงการทำสำเนารหัส
Grimmy

@Grimy ขอบคุณอีกครั้ง ฉันยังเพิ่มว่าเป็นเคล็ดลับในการโพสต์เคล็ดลับเล็ก ๆ ของฉัน :)
Kevin Cruijssen

3

Mathematica, 64 ไบต์

a=Tr@*IntegerDigits;Nest[NestWhile[#+1&,#+1,a@#!=a[#^2]&]&,1,#]&

ฟังก์ชั่นที่ไม่ระบุชื่อง่าย ศูนย์การจัดทำดัชนี


3

Pyth, 15

e.fqsjZTsj^Z2TQ

1 ไบต์ขอบคุณ DenkerAffe!

ลองได้ที่นี่หรือเรียกใช้ชุดทดสอบ

ใช้ตัวเลือก 1 ดัชนี

การใช้งานแบบไร้เดียงสา.fซึ่งได้รับnหมายเลขแรกที่ตรงกับเงื่อนไขที่กำหนด


คุณสามารถบันทึกหนึ่งไบต์โดยลบhถ้าคุณใช้การจัดทำดัชนี 1 ซึ่งได้รับอนุญาตอย่างชัดเจน
Denker

@ DenkerAffe โอ้ขอบคุณฉันควรอ่านเพิ่มเติมอย่างใกล้ชิด: P
FryAmTheEggman

2

MATL , 24 23 ไบต์

x`@2:^"@V!Us]=?@]NG<]1$

ใช้อินพุตที่อิง 1

ลองออนไลน์!

x        % take inpout and delete it (gets copied into clipboard G)
`        %   do...while
  @      %   push loop iteration index: candidate number, n
  2:^    %   array [n n^2]
  "      %   for each element of that array 
    @    %     push that element 
    V!U  %     get its digits (to string, transpose, to number)
    Xs   %     compute their sum
  ]      %   end for each
  =      %   are the two sums equal?
  ?      %   if so
    @    %     the candidate number is valid: push it
  ]      %   end if
  NG<    %   is number of elements in stack less than input?
]        % if so, proceed with next iteration. End do...while. 
1$       % specify 1 input for implicit display: only top of stack

1
ดีมากที่ MATL อยู่ในรายชื่อคอมไพเลอร์ระยะไกล
Abr001am

1

Julia, 79 66 ไบต์

f(n,x=0,i=1,s=c->sum(digits(c)))=x<n?f(n,x+(s(i)==s(i^2)),i+1):i-1

นี่คือฟังก์ชันเรียกซ้ำที่ยอมรับจำนวนเต็มและส่งกลับจำนวนเต็ม มันใช้การจัดทำดัชนีแบบ 1

เราเก็บบางสิ่งไว้เป็นอาร์กิวเมนต์ของฟังก์ชัน:

  • n : อินพุต
  • x : ตัวนับจำนวนตัวเลขที่มีเงื่อนไขนี้ที่เราพบ
  • i : ตัวเลขเพื่อตรวจสอบสภาพ
  • s : ฟังก์ชันเพื่อคำนวณผลรวมของตัวเลขของอินพุตของมัน

ในขณะที่xมีค่าน้อยกว่าการป้อนข้อมูลที่เรา recurse, incrementing xถ้าเป็นไปตามเงื่อนไขและการเพิ่มi iครั้งหนึ่งx == nเรากลับมาiแต่เราต้องลบ 1 เพราะมันจะเพิ่มขึ้นหลายครั้งเกินไป


1

นูน 0.2, 36 35 ไบต์

นูนเป็นภาษาใหม่ที่ฉันกำลังพัฒนาซึ่งขึ้นอยู่กับ CJam และ Golfscript เป็นอย่างมาก ล่ามและ IDE สามารถพบได้ที่นี่ อินพุตเป็นจำนวนเต็มในอาร์กิวเมนต์บรรทัดคำสั่ง ดัชนีเป็นฐานเดียว ใช้การเข้ารหัสCP-1252

1\{\__2#¶{s:~:+}%:={\(\)\}{)\}?}h;(

1

Mathematica, 63 60 61 59 ไบต์

Select[Range[9^#],Equal@@Tr/@IntegerDigits/@{#,#^2}&][[#]]&

ในขณะที่ทำสิ่งนี้คำตอบอื่น ๆ ก็ผุดขึ้นมา แต่ฉันก็ตีมันทีละไบต์และฉันโพสต์สิ่งนี้ก่อนที่มันจะถูกตีกอล์ฟ หนึ่งดัชนี


ไม่สามารถป้อนข้อมูล>2457ได้ เพียงเพิ่มคุณRangeจะไม่ช่วยเพราะA058369[n]/nดูเหมือนจะไม่มาบรรจบกัน
เมอ

ดีขึ้นหรือไม่ filler +
CalculatorFeline

10^# จะสั้นกว่า 2^#*9จะสั้นกว่าแน่นอนว่ามันช้าเกินไปหลังจากที่ n มีค่ามากกว่า 6 ...
feersum

ทำไมไม่ 9^# fil
เครื่องคิดเลข

คุณมีหลักฐานว่า f (n) <= 9 ^ n หรือไม่ (10 ชัดเจนเพราะ 10 ^ n เป็นวิธีแก้ปัญหาเสมอ)
feersum

1

เรติน่า 103 ไบต์

\d+
$*1 x
{`x+
$.0$*x¶$.0$*a¶$.0$*b
%`b
$_
a+|b+
$.0
\d
$*
+`1¶1
¶
1(.*)¶¶$|¶[^d]+
$1x
}`^ ?x

x

สามารถเล่นกอล์ฟได้อย่างแน่นอน

ใช้ฟีเจอร์ Retina ใหม่%สำหรับการยกกำลังสอง (ดังนั้นยังไม่สามารถทำงานกับเวอร์ชั่นออนไลน์ได้)


1

Mathcad, 70 50 ไบต์

Mathcad ไม่มีฟังก์ชั่นในการแปลงตัวเลขเป็นสตริงหลักดังนั้นฟังก์ชันผู้ใช้ d (a) จึงทำงานนี้ จากนั้นโปรแกรมจะวนซ้ำผ่านจำนวนเต็มบวกทดสอบความเท่ากันของผลรวมจนกว่าจะมีตัวเลข n สะสมในเวกเตอร์ v โปรแกรมจะถูกประเมินโดยใช้ตัวดำเนินการ = ซึ่งแสดงผลเวกเตอร์ (โปรดทราบว่าโปรแกรมทั้งหมดจะปรากฏตรงตามที่แสดงด้านล่างบนแผ่นงาน Mathcad )

อัปเดตโปรแกรม: สมมติว่าการเตรียมใช้งานเริ่มต้นของ a เป็นศูนย์และใช้ข้อเท็จจริงที่ Mathcad ส่งคืนค่าของคำสั่งที่ประเมินล่าสุดในโปรแกรม
ทำให้การใช้ลำดับการประเมินผลของนิพจน์เพื่อเพิ่มตัวแปร a ในการสรุปครั้งแรก (ซึ่งจะพร้อมใช้งานในผลรวมของกำลังสอง)

ป้อนคำอธิบายรูปภาพที่นี่

โปรแกรมดั้งเดิม: ส่งคืนเวกเตอร์ของตัวเลขทั้งหมดไม่เกิน n

ป้อนคำอธิบายรูปภาพที่นี่



0

Java 8, 113 ไบต์

n->{int r=0;for(;n>=0;)if((++r+"").chars().map(c->c-48).sum()==(r*r+"").chars().map(c->c-48).sum())n--;return r;}

0 การจัดทำดัชนี

คำอธิบาย:

ลองออนไลน์

n->{           // Method with integer as both parameter and return-type
  int r=0;     //  Result-integer, starting at 0
  for(;n>=0;)  //  Loop as long as `n` is zero or positive
    if((++r    //   Increase `r` by 1 first
       +"").chars().map(c->c-48).sum()
               //   And if the sum of its digits
       ==(r*r+"").chars().map(c->c-48).sum())
               //   equals the sum of the digit of its square
      n--;     //    Decrease `n` by 1
  return r;}   //  Return the result


0

TI-BASIC 66 62 ไบต์

Ans→N:While X<N:IS>(A,A::A:prgmA:Ans→B:A²:prgmA:If B=Ans:IS>(X,N:End:A
sum(int(10fPart(Ans₁₀^(seq(⁻X-1,X,0,log(Ans

nAns
nระยะ TH ในลำดับ

Ansฟังก์ชั่นตัวช่วยสร้างผลรวมของตัวเลขของค่าในที่

ตัวอย่าง:

3:prgmCDGF1E
             10
5:prgmCDGF1E
             19
8:prgmCDGF1E
             55
10:prgmCDGF1E
             99

คำอธิบาย:

Ans→N:While X<N:IS>(A,A::A:prgmA:Ans→B:A²:prgmA:If B=Ans:IS>(X,N:End:A ;prgmCDGF1E

Ans→N            ;store the input in N
While X<N        ;loop until the Nth term has been reached
IS>(A,A:         ;add 1 to A
                 ; (Increment A and skip the next statement if A>A)
A                ;leave A in Ans
prgmA            ;call the helper program below
Ans→B            ;store the result of the helper program in B
A²               ;square A and leave the result in Ans
prgmA            ;call the helper program below
                 ; (result is in Ans)
If B=Ans         ;if the two results are equal
IS>(X,N          ;add 1 to X
                 ; (Increment X and skip the next statement if X>N)
End
A                ;leave A in Ans
                 ;implicit print of Ans

sum(int(10fPart(Ans₁₀^(seq(⁻X-1,X,0,log(Ans   ;prgmA

                      seq(⁻X-1,X,0,log(Ans    ;generate a list...
                                              ; using X as the variable,
                                              ; starting at 0,
                                              ; ending at the log of Ans,
                                              ; and evaluating "⁻X-1" for each element
                                              ; (implicit increment of 1)
                   ₁₀^(                       ;raise 10 to the power of each element
                Ans                           ;multiply each element by the input
          fPart(                              ;remove the integer part from each element
        10                                    ;multiply each element by 10
    int(                                      ;round each element to the nearest integer
sum(                                          ;then sum the resulting list

หมายเหตุ: TI-BASIC เป็นภาษาโทเค็น จำนวนตัวอักษรไม่เท่ากับจำนวนไบต์


0

J , 62 ไบต์

[:{:({.@](>:@[,],[#~(=&(1#."."0@":)*:)@[)}.@])^:(#@]<1+[)^:_&1

ลองออนไลน์!

1 การจัดทำดัชนี เจอีกครั้งทำงานได้ไม่ดีในภารกิจ "ลำดับที่" เหล่านี้เนื่องจากกลไกการทำบัญชีมากเกินไป


0

APL (NARS), 49 ตัวอักษร, 98 ไบต์

r←h w;c
c←r←0
→2×⍳∼=/+/¨(⍎¨⍕)¨r,r×r+←1⋄→2×⍳w>c+←1

การจัดทำดัชนีแบบทดสอบ 1 รายการ:

  h¨⍳20
1 9 10 18 19 45 46 55 90 99 100 145 180 189 190 198 199 289 351 361 

0

MathGolfขนาด 10 ไบต์

♪╒gÆ‼Σ²Σ=§

ลองออนไลน์!

คำอธิบาย

ú10n

♪            push 1000
 ╒           range(1,n+1)
  gÆ         filter list using the next 5 operators
    ‼        apply next two commands to TOS
     Σ       sum(list), digit sum(int)
      ²      pop a : push(a*a) (square)
       Σ     sum(list), digit sum(int) (pushes the digit sum of the square)
        =    pop(a, b), push(a==b) (compares the two)
         §   get from array (returns the <input>th item from the filtered list

บางทีฉันควรสร้างการแชทสำหรับ MathGolf .. อย่างไรก็ตามฉันมีคำถาม: มี builtins ใด ๆ สำหรับการแทนที่แยกและอื่น ๆ สำหรับสตริง? ฉันมีความรู้สึกบีบอัดอาจบันทึก bytes ที่นี่ แต่ไม่แน่ใจว่า builtins อยู่เพื่อให้บรรลุ
Kevin Cruijssen

มีการแชท MathGolf ปิดอยู่ ฉันพยายามทำให้มันมีชีวิตอยู่ แต่เมื่อไม่นานมานี้ฉันทำงานล้นมือและมันก็ปิดตัวลง ฉันไม่ต้องการรบกวน mods ทุกครั้ง เพื่อตอบคำถามของคุณ MathGolf ไม่ได้มีจุดประสงค์เพื่อจัดการกับการดำเนินงานของสายอักขระ แต่ฉันได้ใช้งานฟังก์ชันสำหรับการจัดการกับสายอักขระเพื่อจัดการกับความท้าทายพื้นฐานบางอย่าง ตามที่คุณสังเกตเห็นยังคงมีความปรารถนามากมาย ถ้าฉันเพิ่มอะไรมันอาจจะคล้ายกับที่ 05AB1E มี แต่ฉันไม่ได้มีเวลาว่างสำหรับการพัฒนา MathGolf เมื่อเดือนที่แล้ว
maxb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.