Kesetaraan dalam jumlah digit

23

pengantar

Mari kita ambil nomornya 180. Ini adalah angka yang menarik karena jumlah digit dari angka ini sama dengan:

1 + 8 + 0 = 9

Dan versi kuadrat dari nomor ini, atau:

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

Keduanya 9 . Jumlah digit angka asli dan angka kuadrat sama. Tentu saja, ini juga ditemukan di OEIS: A058369 .

Tugas

Dengan bilangan bulat non-negatif n, nberikan angka positif th dengan kondisi ini.

Kasus uji ( diindeks nol )

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

Input juga dapat diindeks 1 jika cocok untuk Anda.

Ini adalah , jadi pengiriman dengan jumlah byte paling sedikit menang!

Adnan
sumber
Jika belum ada yang melihatnya, hanya angka yang setara dengan 0 atau 1 (mod 9) yang dapat muncul dalam daftar.
Neil
@MamaFunRoll Um ... no. Maaf. Angka dengan akar digital 5 memiliki kuadrat yang akar digitalnya 7.
Neil
@Neil owait nvm
Mama Fun Roll
Saya menulis predikat Brachylog untuk menentukan apakah input adalah istilah dari urutan ini, tetapi tidak bisa membuat boilerplate find-n berfungsi, jadi saya akan membiarkannya dalam komentar:^₂;?{ẹ+}ᵛ
String yang tidak terkait

Jawaban:

5

Jelly, 13 byte

,²DS€=/
1dz#Ṫ

Input diindeks 1. Cobalah online!

Bagaimana itu bekerja

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.
Dennis
sumber
4

Haskell, 54 byte

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

Contoh penggunaan: ([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
nimi
sumber
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")

Saya menghabiskan 30 menit untuk mencoba ini sampai saya menyadari bahwa saya mengeluarkan variabel yang salah: |

Ini adalah indeks-nol.

Downgoat
sumber
1
Saya merasa ingin mengubah ini menjadi fungsi rekursif akan mempersingkat ini ...
Mama Fun Roll
4

Perl 6, 47 46 byte

{(grep {$_.comb.sum==$_².comb.sum},1..*)[$_]}
Tombol cepat
sumber
4

05AB1E , 10 9 8 byte

µNÐn‚1öË

1-diindeks.

-1 byte terima kasih kepada @Emigna dengan menghapus implisit ½(naikkan counter_variablesetelah setiap iterasi) di akhir
-1 byte terima kasih kepada @Grimy menghapus duplikat SOdengan menggunakan‚1ö

Cobalah online.

Penjelasan:

µ         # 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)
Kevin Cruijssen
sumber
2
Anda tidak perlu di ½sini karena tersirat
Emigna
1
-1: µNDn‚1öË. seperti SOtetapi vektorisasi, yang memungkinkan kita menghindari duplikasi kode.
Grimmy
@Grimy Terima kasih lagi. Saya juga menambahkan itu sebagai tip pada posting Tips kecil saya. :)
Kevin Cruijssen
3

Mathematica, 64 byte

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

Fungsi anonim sederhana. Diindeks nol.

LegionMammal978
sumber
3

Pyth, 15

e.fqsjZTsj^Z2TQ

1 byte berkat DenkerAffe!

Cobalah di sini atau jalankan Test Suite .

Menggunakan opsi 1-diindeks.

Menggunakan implementasi naif .fyang mendapatkan nangka pertama yang cocok dengan kondisi yang diberikan.

FryAmTheEggman
sumber
Anda dapat menyimpan satu byte dengan menghapus hjika Anda menggunakan pengindeksan 1 yang secara eksplisit diizinkan.
Denker
@DenkerAffe Oh, terima kasih saya harus membaca lebih dekat: P
FryAmTheEggman
2

MATL , 24 23 byte

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

Menggunakan input berbasis 1.

Cobalah online!

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
Luis Mendo
sumber
1
sangat bagus bahwa MATL akhirnya terdaftar di antara kompiler yang jauh di sana!
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

Ini adalah fungsi rekursif yang menerima integer dan mengembalikan integer. Ini menggunakan pengindeksan berbasis 1.

Kami menyimpan beberapa hal sebagai argumen fungsi:

  • n : Masukan
  • x : Penghitung berapa banyak angka dengan kondisi ini yang kami temukan
  • i : Nomor untuk memeriksa kondisi
  • s : Suatu fungsi untuk menghitung jumlah digit dari inputnya

Meskipun xkurang dari input, kami berulang, bertambah xjika imemenuhi kondisi dan bertambah i. Sekali x == n, kita kembali i, tetapi kita harus mengurangi 1 karena itu akan bertambah satu kali terlalu banyak.

Alex A.
sumber
1

Cembung 0,2, 36 35 byte

Convex adalah bahasa baru yang saya kembangkan yang sangat didasarkan pada CJam dan Golfscript. Interpreter dan IDE dapat ditemukan di sini . Input adalah bilangan bulat ke argumen baris perintah. Indeks berbasis satu. Menggunakan pengkodean CP-1252 .

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

Mathematica, 63 60 61 59 byte

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

Sambil membuat ini, jawaban yang lain muncul tetapi saya mengalahkan mereka dengan satu byte dan saya memposting ini sebelum yang satu mendapatkan golf. Satu diindeks.

CalculatorFeline
sumber
Gagal input >2457. Cukup meningkatkan Anda Rangetidak akan membantu, karena A058369[n]/ntampaknya tidak bertemu.
murphy
Lebih baik? filler +
CalculatorFeline
10^#akan lebih pendek dari 2^#*9. Tentu saja menjadi terlalu lambat setelah n lebih besar dari sekitar 6 ...
feersum
Kenapa tidak 9^#? Fil
CalculatorFeline
Apakah Anda memiliki bukti bahwa f (n) <= 9 ^ n? (10 jelas karena 10 ^ n selalu merupakan solusi).
feersum
1

Retina, 103 byte

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

x

Jelas golf.

Menggunakan fitur Retina baru% untuk mengkuadratkan (karenanya belum berfungsi dengan versi online).

randomra
sumber
1

Mathcad, 70 50 byte

Mathcad tidak memiliki fungsi bawaan untuk mengonversi angka menjadi string digitnya, sehingga fungsi pengguna d (a) melakukan pekerjaan ini. Suatu program kemudian beralih melalui bilangan bulat positif, menguji kesetaraan jumlah, sampai ia mengakumulasikan n angka dalam vektor v. Program ini dievaluasi menggunakan operator =, yang menampilkan vektor hasil. ( Perhatikan bahwa seluruh program muncul persis seperti yang ditampilkan di bawah ini pada lembar kerja Mathcad )

Program yang diperbarui: Mengasumsikan inisialisasi default a ke nol dan memanfaatkan fakta bahwa Mathcad mengembalikan nilai pernyataan yang terakhir dievaluasi dalam suatu program.
Membuat penggunaan urutan evaluasi ekspresi ke variabel kenaikan dalam penjumlahan pertama (dan yang kemudian tersedia untuk digunakan dalam jumlah kuadrat)

masukkan deskripsi gambar di sini

Program asli: Mengembalikan vektor semua angka hingga n.

masukkan deskripsi gambar di sini

Stuart Bruff
sumber
0

Japt , 15 byte

1-diindeks

_ìx ¶Z²ìx «U´}a

Cobalah

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

Diindeks 0

Penjelasan:

Cobalah online.

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
Kevin Cruijssen
sumber
0

Perl 5 -p , 53 byte

Termasuk +1untuk-p

1 berbasis

#!/usr/bin/perl -p
$.++while$_-=!eval+("-($.) ".$.**2)=~s/\B/+/gr;$_=$.

Cobalah online!

Ton Hospel
sumber
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 th istilah dalam urutan.

Fungsi helper menghasilkan jumlah digit nilai dalam Ans.

Contoh:

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

Penjelasan:

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

Catatan: TI-BASIC adalah bahasa tokenized. Jumlah karakter tidak sama dengan jumlah byte.

Tau
sumber
0

J , 62 byte

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

Cobalah online!

1 diindeks. Sekali lagi saya tidak berkinerja baik pada tugas-tugas "nth of" ini, karena mekanisme pembukuan yang berlebihan.

Jonah
sumber
0

APL (NARS), 49 karakter, 98 byte

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

1-diindeks, uji:

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

MathGolf , 10 byte

♪╒gÆ‼Σ²Σ=§

Cobalah online!

Penjelasan

ú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
maks
sumber
Mungkin saya harus membuat obrolan untuk MathGolf .. Ngomong-ngomong, saya punya pertanyaan: apakah ada bawaan untuk diganti, dibagi, dan semacamnya untuk string? Saya merasa kompresi mungkin menghemat byte di sini, tetapi tidak yakin apakah ada builtin untuk mencapainya.
Kevin Cruijssen
Ada obrolan MathGolf tertutup. Saya mencoba membuatnya tetap hidup, tetapi belakangan ini saya dibanjiri dengan pekerjaan, dan itu terus ditutup. Saya tidak ingin mengganggu mod setiap saat. Untuk menjawab pertanyaan Anda, MathGolf tidak benar-benar dimaksudkan untuk menangani operasi string, tetapi saya telah mengimplementasikan fungsionalitas untuk penanganan string untuk menangani beberapa tantangan dasar. Seperti yang Anda perhatikan, masih banyak yang harus diinginkan. Jika saya menambahkan sesuatu, itu mungkin akan menjadi sesuatu yang mirip dengan apa yang dimiliki 05AB1E, tetapi saya belum benar-benar mendapatkan waktu luang untuk pengembangan MathGolf beberapa bulan terakhir ini.
Maks