Gleichheit in der Summe der Ziffern


23

Einführung

Nehmen wir die Nummer 180. Dies ist eine interessante Zahl, weil die Summe der Ziffern dieser Zahl gleich ist:

1 + 8 + 0 = 9

Und die quadratische Version dieser Zahl, oder:

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

Dies sind beide 9 . Die Summe der Ziffern der ursprünglichen Nummer und der quadrierten Nummer ist identisch. Dies ist natürlich auch bei OEIS zu finden: A058369 .

Aufgabe

Bei einer nicht-negativen Ganzzahl ngeben Sie die nth positive Zahl mit dieser Bedingung aus.

Testfälle ( null-indiziert )

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

Die Eingabe kann auch 1-indiziert werden, wenn dies besser zu Ihnen passt.

Das ist , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!


Falls noch niemand es entdeckt hat, können nur Zahlen in der Liste erscheinen, die 0 oder 1 entsprechen (Mod 9).
Neil

@MamaFunRoll Um ... nein. Es tut uns leid. Zahlen mit digitalen Wurzeln von 5 haben Quadrate mit einer digitalen Wurzel von 7.
Neil

@Neil owait nvm
Mama Fun Roll

Ich habe ein Brachylog-Prädikat geschrieben, um zu bestimmen, ob die Eingabe ein Term dieser Sequenz ist oder nicht, aber ich konnte das find-n-te Boilerplate nicht zum Laufen bringen. Deshalb lasse ich es einfach in einem Kommentar:^₂;?{ẹ+}ᵛ
Unrelated String

Antworten:


5

Jelly, 13 Bytes

,²DS€=/
1dz#Ṫ

Die Eingabe ist 1-indiziert. Probieren Sie es online!

Wie es funktioniert

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 Bytes

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

Anwendungsbeispiel: ([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")

Ich habe 30 Minuten damit verbracht, dies zum Laufen zu bringen, bis mir klar wurde, dass ich die falsche Variable ausgegeben habe: |

Dies ist nullindiziert.


1
Ich habe das Gefühl, dies in eine rekursive Funktion umzuwandeln, würde dies sehr verkürzen ...
Mama Fun Roll

4

Perl 6, 47 46 Bytes

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

4

05AB1E , 10 9 8 Bytes

µNÐn‚1öË

1-indiziert.

-1 Byte dank @Emigna durch Entfernen des Impliziten ½(Anstieg counter_variablenach jeder Iteration) am Ende
-1 Byte dank @Grimy durch Entfernen des duplizierten SOdurch Verwenden von‚1ö

Probieren Sie es online aus.

Erläuterung:

µ         # 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
Sie brauchen ½hier nicht , da es implizit ist
Emigna

1
-1: µNDn‚1öË. ist wie SOaber vektorisiert, wodurch wir Codeduplizierungen vermeiden können.
Grimmy

@ Grimy Nochmals vielen Dank. Ich habe das auch als Tipp zu meinem Beitrag Kleine Tipps hinzugefügt. :)
Kevin Cruijssen

3

Mathematica, 64 Bytes

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

Einfache anonyme Funktion. Nullindexiert.


3

Pyth, 15

e.fqsjZTsj^Z2TQ

1 Byte dank DenkerAffe!

Probieren Sie es hier aus oder führen Sie eine Test Suite aus .

Verwendet die Option 1-indiziert.

Naive Implementierung mit .fder die ersten nZahlen abgerufen werden, die der gegebenen Bedingung entsprechen.


Sie können ein Byte sparen, indem hSie entfernen, wenn Sie eine explizit zulässige 1-Indizierung verwenden.
Denker

@DenkerAffe Oh, danke, ich sollte genauer lesen: P
FryAmTheEggman

2

MATL , 24 23 Bytes

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

Verwendet 1-basierte Eingabe.

Probieren Sie es 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

1
sehr schön, dass MATL dort endlich unter fernen Compilern gelistet ist!
12.

1

Julia, 79 66 Bytes

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

Dies ist eine rekursive Funktion, die eine Ganzzahl akzeptiert und eine Ganzzahl zurückgibt. Es wird eine 1-basierte Indizierung verwendet.

Wir speichern einige Dinge als Funktionsargumente:

  • n : Die Eingabe
  • x : Ein Zähler für wie viele Zahlen mit dieser Bedingung wir gefunden haben
  • i : Eine Zahl, die auf den Zustand überprüft werden soll
  • s : Eine Funktion zur Berechnung der Summe der Ziffern ihrer Eingabe

While xist kleiner als die Eingabe, wir rekursiv, inkrementieren, xwenn idie Bedingung erfüllt ist, und inkrementieren i. Einmal x == nkehren wir zurück i, aber wir müssen 1 subtrahieren, weil es zu oft inkrementiert wurde.


1

Konvex 0,2, 36, 35 Bytes

Convex ist eine neue Sprache, die ich entwickle und die stark auf CJam und Golfscript basiert. Den Interpreter und die IDE finden Sie hier . Die Eingabe ist eine Ganzzahl in die Befehlszeilenargumente. Indizes sind einseitig. Verwendet die CP-1252- Codierung.

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

1

Mathematica, 63 60 61 59 Bytes

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

Währenddessen tauchte die andere Antwort auf, aber ich schlage sie um ein einzelnes Byte und poste dies, bevor die eine golfen wird. Einer indiziert.


Eingabe fehlgeschlagen >2457. Einfach zu erhöhen Rangehilft nicht, weil A058369[n]/nes nicht konvergiert.
Murphy

Besser? filler +
CalculatorFeline

10^#wäre kürzer als 2^#*9. Natürlich wird es zu langsam, nachdem n größer ist als ungefähr 6 ...
feersum

Warum nicht 9^#? Fil
CalculatorFeline

Haben Sie einen Beweis, dass f (n) <= 9 ^ n ist? (10 ist offensichtlich, weil 10 ^ n immer eine Lösung ist).
Feersum

1

Retina, 103 Bytes

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

x

Auf jeden Fall golfen.

Verwendet die neue Retina-Funktion% zum Quadrieren (funktioniert daher noch nicht mit der Online-Version).


1

Mathcad, 70 50 Bytes

Mathcad hat keine eingebauten Funktionen, um eine Zahl in eine Ziffernfolge umzuwandeln. Die Benutzerfunktion d (a) übernimmt diese Aufgabe. Ein Programm durchläuft dann die positiven ganzen Zahlen und prüft auf Gleichheit der Summen, bis es n Zahlen im Vektor v akkumuliert hat. Das Programm wird mit dem Operator = ausgewertet, der den Ergebnisvektor anzeigt. ( Beachten Sie, dass das gesamte Programm genau so angezeigt wird, wie es unten im Mathcad-Arbeitsblatt angezeigt wird. )

Aktualisiertes Programm: Setzt die Standardinitialisierung von a auf Null voraus und nutzt die Tatsache, dass Mathcad den Wert der zuletzt ausgewerteten Anweisung in einem Programm zurückgibt.
Verwendet die Auswertungsreihenfolge von Ausdrücken, um die Variable a in der ersten Summe zu erhöhen (und die dann zur Verwendung in der Summe der Quadrate verfügbar ist).

Bildbeschreibung hier eingeben

Originalprogramm: Liefert einen Vektor aller Zahlen bis n.

Bildbeschreibung hier eingeben



0

Java 8, 113 Bytes

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-indiziert

Erläuterung:

Probieren Sie es online aus.

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 Bytes

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

Die Hilfsfunktion generiert die Summe der Ziffern des Wertes in Ans.

Beispiele:

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

Erläuterung:

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

Hinweis: TI-BASIC ist eine Token-Sprache. Die Anzahl der Zeichen entspricht nicht der Anzahl der Bytes.


0

J , 62 Bytes

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

Probieren Sie es online!

1 indiziert. J hat diese "n-ten" Aufgaben erneut nicht gut gemeistert, weil die Buchhaltung zu hoch war.


0

APL (NARS), 49 Zeichen, 98 Byte

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

1-indiziert, 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 Bytes

♪╒gÆ‼Σ²Σ=§

Probieren Sie es online!

Erläuterung

ú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

Vielleicht sollte ich einfach einen Chat für MathGolf erstellen. Wie auch immer, ich habe eine Frage: Gibt es integrierte Funktionen zum Ersetzen, Teilen durch und dergleichen für Zeichenfolgen? Ich habe das Gefühl, dass die Komprimierung hier möglicherweise Bytes spart, bin mir aber nicht sicher, ob die eingebauten Funktionen vorhanden sind, um dies zu erreichen.
Kevin Cruijssen

Es gibt einen geschlossenen MathGolf Chat. Ich habe versucht, es am Leben zu erhalten, aber in letzter Zeit wurde ich von Arbeit überflutet, und es wurde immer geschlossen. Ich möchte die Mods nicht jedes Mal stören. Um Ihre Frage zu beantworten, war MathGolf nicht wirklich dazu gedacht, Zeichenfolgenoperationen auszuführen, aber ich habe Funktionen für die Zeichenfolgenverarbeitung implementiert, um einige grundlegende Herausforderungen zu bewältigen. Wie Sie bemerkt haben, bleibt noch viel zu wünschen übrig. Wenn ich irgendetwas hinzufüge, wird es wahrscheinlich etwas ähnliches sein wie 05AB1E, aber ich habe in den letzten Monaten wirklich keine Freizeit für die MathGolf-Entwicklung bekommen.
Maxb
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.