Rakamların toplamında eşitlik


23

Giriş

Numarayı alalım 180. Bu ilginç bir sayıdır, çünkü bu sayının rakamlarının toplamı şuna eşittir:

1 + 8 + 0 = 9

Ve bu sayının kare versiyonu veya:

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

Her ikisi de 9 . Orijinal sayının ve kare sayının rakamlarının toplamı aynıdır. Tabii ki, bu OEIS'te de bulunur: A058369 .

Görev

Negatif olmayan bir tamsayı Verilen n, çıktılı ninci pozitif bu durumdaki numarayı.

Test durumları ( sıfır dizinli )

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

Giriş size daha uygunsa 1 indeksli de olabilir .

Bu , bu yüzden en az sayıda bayt olan gönderim kazanıyor!


Henüz kimsenin tespit edemediği durumda, listede yalnızca 0 veya 1'e (mod 9) eşdeğer sayılar görünebilir.
Neil

@MamaFunRoll Um ... hayır. Üzgünüm. Dijital kökleri 5 olan kareler dijital kökleri 7 olan karelere sahiptir.
Neil

@Neil nvm
Mama Fun Roll

Girişin bu dizinin bir terimi olup olmadığını belirlemek için bir Brachylog yüklemi yazdım, ancak buluntu kazanının çalışmasını sağlayamadım, bu yüzden bir yorumda bırakacağım:^₂;?{ẹ+}ᵛ
İlişkili Dize

Yanıtlar:


5

Jöle, 13 bayt

,²DS€=/
1dz#Ṫ

Giriş 1 indeksli. Çevrimiçi deneyin!

Nasıl çalışır

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 bayt

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

Kullanım örneği: ([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 bayt

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

Yanlış değişkeni çıktığımı anlayana kadar bu çalışmayı denemek için 30 dakika harcadım: |

Bu sıfır dizinli.


1
Bunu özyinelemeli bir işleve dönüştürmek, bunu çok daha fazla kısaltacağını hissediyorum ...
Mama Fun Roll


4

05AB1E , 10 9 8 bayt

µNÐn‚1öË

1 endeksli.

@Emigna sayesinde -1 bayt Sonunda örtük olanı kaldır½ ( counter_variableher yinelemeden sonra artır)
- -1Grup sayesinde @Grimy'yiSO kullanarak çoğaltılmış kopyayı kaldırarak‚1ö

Çevrimiçi deneyin.

Açıklama:

µ         # 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
½Buraya dolaylı olarak ihtiyacın yok
Emigna

1
1: µNDn‚1öË. gibidir, SOancak kodları tekrarlamaktan kaçınmamızı sağlayan vectorizes.
Grimmy

@Grimy Tekrar teşekkürler. Bunu, Küçük ipuçları gönderime bir ipucu olarak ekledim. :)
Kevin Cruijssen

3

Mathematica, 64 bayt

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

Basit anonim işlev. Sıfır endekslendi.


3

Pyth, 15

e.fqsjZTsj^Z2TQ

DenkerAffe'ye 1 byte teşekkürler!

Burada deneyin veya bir Test Suite çalıştırın .

1 indeksli seçeneği kullanır.

Verilen koşula uyan .filk nsayıları alan Naive uygulaması .


hAçıkça izin verilen 1-indeksleme kullanıyorsanız, bir bayttan tasarruf edebilirsiniz .
Denker

@DenkerAffe Oh, teşekkürler, daha yakından okumam gerekir: P
FryAmTheEggman

2

MATL , 24 23 bayt

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

1 tabanlı giriş kullanır.

Çevrimiçi deneyin!

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'nin sonunda uzaktaki derleyiciler arasında yer alması çok hoş!
Abr001,

1

Julia, 79 66 bayt

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

Bu bir tamsayıyı kabul eden ve bir tamsayı döndüren özyinelemeli bir işlevdir. 1 tabanlı indeksleme kullanır.

Birkaç şeyi fonksiyon argümanları olarak saklıyoruz:

  • n : Girdi
  • x : Bu koşulla kaç tane sayı bulduğumuza ilişkin bir sayaç
  • i : Durumu kontrol etmek için bir numara
  • s : Girişindeki basamakların toplamını hesaplayan bir işlev

Girdiden xdaha az olsa da, tekrarlar, koşulu yerine xgetirirse arttırır ive arttırırız i. Bir kez x == ndöneceğiz i, ancak 1'i çıkarmak zorundayız çünkü bir çok kez arttırılmış olacak.


1

Dışbükey 0.2, 36 35 bayt

Dışbükey, CJam ve Golfscript'e dayanan, geliştirdiğim yeni bir dildir. Tercüman ve IDE burada bulunabilir . Giriş, komut satırı argümanlarına bir tamsayıdır. Dizinler bir tabanlıdır. CP-1252 kodlamasını kullanır .

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

1

Mathematica, 63 60 61 59 bayt

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

Bunu yaparken diğer cevap ortaya çıktı ama tek bir bayt tarafından onları yeniyorum ve bu bir golf oynamadan önce bunu gönderiyorum. Bir tanesi indekslendi.


Giriş başarısız >2457. Basitçe Rangeyardımınızı arttırmayacaksınız çünkü bir araya A058369[n]/ngelmiyor gibi görünüyor.
murphy

Daha iyi? filler +
CalculatorFeline

10^#daha kısa olurdu 2^#*9. Tabii ki o ... çok yavaş n 6 hakkında daha büyüktür sonra olur
feersum

Neden olmasın 9^#? Fil
CalculatorFeline

F (n) <= 9 ^ n olduğuna dair bir kanıtınız var mı? (10 açıktır çünkü 10 ^ n her zaman bir çözümdür).
feersum

1

Retina, 103 bayt

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

x

Kesinlikle golf oynayabilir.

Kare alma için yeni Retina özelliğini% kullanır (bu nedenle henüz çevrimiçi sürümle çalışmıyor).


1

Mathcad, 70 50 bayt

Mathcad, bir sayıyı sayısal dizgeye dönüştürecek yerleşik işlevlere sahip değildir, bu nedenle kullanıcı işlevi d (a) bu işi yapar. Bir program daha sonra pozitif tamsayıları yineleyerek, toplamlar eşitliği için test eder, v vektöründe n sayıları toplanıncaya kadar. Program, sonuç vektörünü görüntüleyen = operatör kullanılarak değerlendirilir. ( Tüm programın aynen Mathcad çalışma sayfasında göründüğü gibi göründüğünü unutmayın )

Güncellenmiş program: Varsayılanın sıfır olduğunu sıfırlar ve Mathcad'in bir programdaki son değerlendirilen ifadenin değerini döndürdüğü gerçeğini kullanır.
İlk toplamda a değişkenini artırmak için değerlendirme ifadesinin kullanılmasını sağlar (ve daha sonra karelerin toplamında kullanılabilir)

görüntü tanımını buraya girin

Orijinal program: n 'e kadar olan tüm sayıların bir vektörünü döndürür.

görüntü tanımını buraya girin



0

Java 8, 113 bayt

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 endeksli

Açıklama:

Çevrimiçi deneyin.

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 bayt

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

Yardımcı işlev, içindeki değerin basamaklarının toplamını oluşturur Ans.

Örnekler:

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

Açıklama:

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

Not: TI-BASIC belirtilmiş bir dildir. Karakter sayısı bayt sayısına eşit değil .


0

J , 62 bayt

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

Çevrimiçi deneyin!

1 endekslendi. J bir kez daha, aşırı defter tutma mekaniği nedeniyle, bu "görev" lerde iyi performans göstermiyor.


0

APL (NARS), 49 karakter, 98 bayt

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

1 indeksli, test:

  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 bayt

♪╒gÆ‼Σ²Σ=§

Çevrimiçi deneyin!

açıklama

ú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

Belki de MathGolf için bir sohbet yapmalıyım. Her neyse, bir sorum var: yerine koymak, ayırmak veya dizgiler için herhangi bir yerleşik var mı? Sıkıştırma burada bayt kazandırabilir, ancak yerleşiklerin bunu gerçekleştirmek için var olup olmadığından emin değilim.
Kevin Cruijssen

Kapalı bir MathGolf sohbeti var. Onu hayatta tutmaya çalıştım ama son zamanlarda işlerle uğraştım ve kapanmaya devam etti. Modları her zaman rahatsız etmek istemiyorum. Sorunuzu cevaplamak için, MathGolf gerçekten string işlemleriyle uğraşmak istemiyordu, ancak bazı temel zorlukları ele almak için string işleme için işlevsellik kullandım. Fark ettiğin gibi, hala arzu edilecek çok şey var. Bir şey eklersem, büyük olasılıkla 05AB1E'nin sahip olduğu ile benzer bir şey olacak, ancak son aylarda MathGolf'un gelişimi için gerçekten boş zamanım olmadı.
maxb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.