Bình đẳng trong tổng các chữ số


23

Giới thiệu

Hãy lấy số 180. Đây là một số thú vị vì tổng các chữ số của số này bằng:

1 + 8 + 0 = 9

Và phiên bản bình phương của số này, hoặc:

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

Cả hai đều là 9 . Tổng các chữ số của số gốc và số bình phương là như nhau. Tất nhiên, điều này cũng được tìm thấy tại OEIS: A058369 .

Bài tập

Cho một số nguyên không âm n, xuất số dươngn thứ th với điều kiện này.

Các trường hợp thử nghiệm ( không có chỉ mục )

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

Đầu vào cũng có thể được lập chỉ mục 1 nếu phù hợp với bạn hơn.

Đây là , vì vậy bài nộp có số byte ít nhất sẽ thắng!


Trong trường hợp chưa có ai phát hiện ra nó, chỉ những số tương đương với 0 hoặc 1 (mod 9) mới có thể xuất hiện trong danh sách.
Neil

@MamaFunRoll Um ... không. Lấy làm tiếc. Các số có gốc kỹ thuật số là 5 có hình vuông có gốc kỹ thuật số là 7.
Neil

@Neil owait nvm
Mama Fun Roll

Tôi đã viết một vị từ Brachylog để xác định xem liệu đầu vào có phải là một thuật ngữ của chuỗi này hay không, nhưng không thể làm cho bản tóm tắt tìm kiếm hoạt động, vì vậy tôi sẽ chỉ để lại trong một nhận xét:^₂;?{ẹ+}ᵛ
Chuỗi không liên quan

Câu trả lời:


5

Thạch, 13 byte

,²DS€=/
1dz#Ṫ

Đầu vào là 1 chỉ mục. Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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 byte

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

Ví dụ sử dụng: ([x|x<-[1..],s x==s(x^2)]!!) 17-> 289.

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 byte

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

Tôi đã dành 30 phút cố gắng để làm việc này cho đến khi tôi nhận ra mình đang xuất sai biến: |

Đây là chỉ số không.


1
Tôi cảm thấy việc biến điều này thành một chức năng đệ quy sẽ rút ngắn điều này lên rất nhiều ...
Mama Fun Roll


4

05AB1E , 10 9 8 byte

µNÐn‚1öË

1 chỉ mục.

-1 byte nhờ vào @Emigna bằng cách xóa ẩn ½(tăng counter_variablesau mỗi lần lặp) ở cuối
-1 byte nhờ @Grimy loại bỏ trùng lặp SObằng cách sử dụng‚1ö

Hãy thử trực tuyến.

Giải trình:

µ         # 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
Bạn không cần ½ở đây vì nó ngầm
Emigna

1
-1 : µNDn‚1öË. giống như SOnhưng vector hóa, cho phép chúng ta tránh sao chép mã.
Grimmy

@Grimy Cảm ơn một lần nữa. Tôi cũng đã thêm rằng đó là một mẹo cho bài viết Mẹo nhỏ của tôi. :)
Kevin Cruijssen

3

Toán học, 64 byte

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

Chức năng ẩn danh đơn giản. Không có chỉ mục.


3

Bình thường, 15

e.fqsjZTsj^Z2TQ

1 byte nhờ DenkerAffe!

Dùng thử tại đây hoặc chạy Test Suite .

Sử dụng tùy chọn 1 chỉ mục.

Việc thực hiện ngây thơ bằng cách sử dụng .fcác nsố đầu tiên phù hợp với điều kiện đã cho.


Bạn có thể lưu một byte bằng cách xóa hnếu bạn sử dụng lập chỉ mục 1 được phép rõ ràng.
Denker

@DenkerAffe Ồ, cảm ơn tôi nên đọc kỹ hơn: P
FryAmTheEggman 11/03/2016

2

MATL , 24 23 byte

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

Sử dụng đầu vào dựa trên 1.

Hãy thử trực tuyến!

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
Rất vui khi MATL cuối cùng được liệt kê trong số các trình biên dịch ở xa đó!
Abr001am

1

Julia, 79 66 byte

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

Đây là một hàm đệ quy chấp nhận một số nguyên và trả về một số nguyên. Nó sử dụng lập chỉ mục dựa trên 1.

Chúng tôi lưu trữ một số điều như các đối số chức năng:

  • n : Đầu vào
  • x : Một bộ đếm cho bao nhiêu số với điều kiện này chúng tôi đã tìm thấy
  • i : Một số để kiểm tra tình trạng
  • s : Một hàm để tính tổng các chữ số của đầu vào của nó

Trong khi xít hơn đầu vào, chúng tôi lặp lại, tăng xnếu iđáp ứng điều kiện và tăng dần i. Một lần x == n, chúng tôi quay lại i, nhưng chúng tôi phải trừ đi 1 vì nó sẽ được tăng lên quá nhiều lần.


1

Lồi 0,2, 36 35 byte

Convex là một ngôn ngữ mới mà tôi đang phát triển dựa nhiều vào CJam và Golfscript. Trình thông dịch và IDE có thể được tìm thấy ở đây . Đầu vào là một số nguyên vào các đối số dòng lệnh. Các chỉ mục là một dựa trên. Sử dụng mã hóa CP-1252 .

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

1

Toán học, 63 60 61 59 byte

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

Trong khi đưa ra câu trả lời khác, tôi bật lên nhưng tôi đánh bại họ bằng một byte duy nhất và tôi đăng bài này trước khi câu đó được đánh gôn. Một chỉ mục.


Thất bại cho đầu vào >2457. Đơn giản chỉ cần tăng Rangesự giúp đỡ của bạn , bởi vì A058369[n]/ndường như không hội tụ.
murumb

Tốt hơn? filler +
CalculatorFeline

10^#sẽ ngắn hơn 2^#*9. Tất nhiên, nó trở nên quá chậm sau khi n lớn hơn khoảng 6 ...
facerum

Tại sao không 9^#? Fil
CalculatorFeline

Bạn có bằng chứng rằng f (n) <= 9 ^ n không? (10 là hiển nhiên vì 10 ^ n luôn là một giải pháp).
frageum

1

Võng mạc, 103 byte

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

x

Chắc chắn là golf.

Sử dụng tính năng Retina mới% cho bình phương (do đó chưa hoạt động với phiên bản trực tuyến).


1

Toán học, 70 50 byte

Mathcad không có các hàm dựng sẵn để chuyển đổi một số thành chuỗi chữ số của nó, vì vậy hàm người dùng d (a) thực hiện công việc này. Sau đó, một chương trình lặp lại thông qua các số nguyên dương, kiểm tra tính bằng nhau của tổng, cho đến khi nó tích lũy được n số trong vectơ v. Chương trình được ước tính bằng toán tử =, hiển thị vectơ kết quả. ( Lưu ý rằng toàn bộ chương trình xuất hiện chính xác như được hiển thị bên dưới trên bảng tính Mathcad )

Chương trình được cập nhật: Giả sử khởi tạo mặc định từ a đến 0 và sử dụng thực tế là Mathcad trả về giá trị của câu lệnh được đánh giá cuối cùng trong một chương trình.
Làm cho việc sử dụng thứ tự đánh giá của các biểu thức để tăng biến a trong tổng đầu tiên (và sau đó có sẵn để sử dụng trong tổng bình phương)

nhập mô tả hình ảnh ở đây

Chương trình gốc: Trả về một vectơ của tất cả các số lên đến n.

nhập mô tả hình ảnh ở đây



0

Java 8, 113 byte

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;}

Chỉ số 0

Giải trình:

Hãy thử trực tuyến.

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 byte

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

Hàm trợ giúp tạo tổng các chữ số của giá trị trong Ans.

Ví dụ:

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

Giải trình:

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

Lưu ý: TI-BASIC là ngôn ngữ được mã hóa. Số lượng ký tự không bằng số byte.


0

J , 62 byte

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

Hãy thử trực tuyến!

1 chỉ mục. J một lần nữa không thực hiện tốt các nhiệm vụ "thứ n" này, vì các cơ chế bảo vệ quá mức.


0

APL (NARS), 49 ký tự, 98 byte

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

1 chỉ mục, kiểm tra:

  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 byte

♪╒gÆ‼Σ²Σ=§

Hãy thử trực tuyến!

Giải trình

ú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

Có lẽ tôi chỉ nên tạo một cuộc trò chuyện cho MathGolf .. Dù sao, tôi có một câu hỏi: có bất kỳ nội dung nào để thay thế, phân tách và như vậy cho các chuỗi không? Tôi có cảm giác nén có thể lưu byte ở đây, nhưng không chắc liệu các nội trang có tồn tại để thực hiện nó hay không.
Kevin Cruijssen

Có một cuộc trò chuyện MathGolf đã đóng. Tôi đã cố gắng giữ cho nó sống, nhưng gần đây tôi đã bị ngập trong công việc và nó tiếp tục bị đóng cửa. Tôi không muốn làm phiền các mod mỗi lần. Để trả lời câu hỏi của bạn, MathGolf thực sự không có ý định xử lý các hoạt động chuỗi, nhưng tôi đã triển khai chức năng xử lý chuỗi để xử lý một số thách thức cơ bản. Như bạn đã nhận thấy, vẫn còn rất nhiều điều mong muốn. Nếu tôi thêm bất cứ thứ gì, nó có thể sẽ giống với những gì 05AB1E có, nhưng tôi thực sự không có thời gian rảnh rỗi để phát triển MathGolf trong những tháng vừa qua.
maxb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.