Eine Dreieckszahl ist eine Zahl, die als Summe aufeinanderfolgender positiver Ganzzahlen ab 1 ausgedrückt werden kann. Sie kann auch mit der Formel ausgedrückt werden n(n + 1) / 2
, bei der n
es sich um eine positive Ganzzahl handelt.
Das digitale Gegenstück einer Zahl wird folgendermaßen berechnet:
- Teilen Sie eine Zahl in ein Array von Ziffern, z
613 => [6 1 3]
- Berechnen Sie für jede Zahl im Array die
n
dritte Dreieckszahl.[6 1 3] => [21 1 6]
- Summiere das resultierende Array;
[21 1 6] => 28
Ihre Aufgabe ist es, mit einer Ganzzahl das digitale Gegenstück zu n
berechnen n
, bis das Ergebnis gleich 1 ist, und dann alle berechneten Werte auszugeben. Sie können die Werte in beliebiger Reihenfolge und optional mit der ursprünglichen Nummer am Anfang des Arrays ausgeben. Dies ist ein Code-Golf, also gewinnt der kürzeste Code.
Testfälle
23 => 9 45 25 18 37 34 16 22 6 21 4 10 1
72 => 31 7 28 39 51 16 22 6 21 4 10 1
55 => 30 6 21 4 10 1
78 => 64 31 7 28 39 51 16 22 6 21 4 10 1
613 => 28 39 51 16 22 6 21 4 10 1
8392 => 90 45 25 18 37 34 16 22 6 21 4 10 1
11111 => 5 15 16 22 6 21 4 10 1
8592025 => 117 30 6 21 4 10 1
999999999 => 405 25 18 37 34 16 22 6 21 4 10 1
141
und hatn
Ziffern. Der maximale Wert, den sein digitales Gegenstück haben kann, ist45n
alsodigi-△(x) ≤ 45n < 45(1+log_10(x))
, und fürx > 141
, wir haben45(1+log_10(x)) < x
, daherdigi-△(x) ≤ x-1
fürx > 141
, und sobald wir die141
Grenze überschreiten, beweisen wir brachiale Gewalt durch Programme.Antworten:
Schale , 6 Bytes
Probieren Sie es online!
Erläuterung
quelle
05AB1E ,
65 BytesProbieren Sie es online! Bearbeiten: 1 Byte dank @Emigna gespeichert. Erläuterung:
quelle
€
mitS
, können Sie überspringenO
.L
sich das überhaupt so?J,
20 bis19 BytesProbieren Sie es online!
Gibt auch die ursprüngliche Nummer aus.
Erläuterung
quelle
[:+/
->1#.
miau!APL (Dyalog) ,
232017 Byte3 Bytes gespart dank @ngn
Probieren Sie es online!
Wie?
⍵∪⍨
- Das aktuelle Array dem voranstellen+/
- die Summe von∊
- abgeflacht⍳¨
- Bereiche von jedem⍎¨⍕
- Ziffer der⊃⍵
- vorheriger Wert⍣≡
bis zur Konvergenz. Die Verwendung von∪
(union) stellt sicher, dass nach dem Verbinden der ersten 1 die nächste aufgrund der festgelegten Eindeutigkeit ausgeschlossen wird und das Array konvergiert.quelle
1↓
(zuerst fallen lassen){+/∊⍳¨⍎¨⍕⎕←⍵}⍣≡
ohne die letzte 1 gedruckt zu bekommen?Haskell,
514746 BytesProbieren Sie es online!
Edit: @ H.PWiz hat ein Byte gespeichert. Vielen Dank!
quelle
Python 2 , 62 Bytes
Probieren Sie es online!
quelle
Wolfram Language (Mathematica) ,
4341 BytesProbieren Sie es online!
Wie es funktioniert
Der Ausdruck
#.(#+1)/2&@IntegerDigits@#
gibt das digitale Gegenstück von an#
. Wir gebenEcho
das ein, verwenden die Kurzschlussauswertung mit,&&
um anzuhalten, wenn wir es erreicht haben1
, und greifen ansonsten auf das digital-rechteckige Gegenstück zurück.-2 Bytes danke an Martin Ender für den
.
Trick: Wir müssenTr
die Ziffern nicht addieren, wenn wir die Multiplikation#(#+1)/2
durch das Skalarprodukt ersetzen#.(#+1)/2
.quelle
Tr
:Echo@#>1&�[#.(#+1)/2&@IntegerDigits@#]&
FixedPointList
außer wie der feste Punkt zweimal gedruckt wird). Es scheint, als hätte das schon früher kommen sollen.Wolfram Language (Mathematica) ,
494239 BytesVielen Dank an Misha Lavrov für das Speichern von 3 Bytes.
Probieren Sie es online! (TIO benötigt
++y
aus irgendeinem Grund Klammern um die . In meiner lokalen Mathematica-Installation funktioniert es ohne sie, wie es sollte.)Gibt jeden Wert in einer eigenen Zeile aus,
>>
der die Startnummer vorausgeht und die Startnummer enthält.quelle
#//.x_:>(y=IntegerDigits@Echo@x).++y/2&
. (...maybe. For some reason, TIO doesn't like this, but Mathematica's fine with it?)#//.x_:>(y=IntegerDigits@Echo@x).(++y)/2&
is 41 bytes and works in TIO. But my copy of Mathematica doesn't think the parentheses are necessary.Ohm v2,
97 bytesTry it online!
Explanation
quelle
u
unnecessary?}
won't split the digitsRetina, 21 bytes
Try it online! (The outputs of the individual cases aren't well separated, but each output ends with a
1
.)Prints each number on its own line, in order, including the starting number.
Explanation
This is just some configuration of the program.
{
makes the program loop until it fails to change the result (which happens once we get to1
),:
prints number before each iteration, and;
prevents the final result from being printed twice at the end of the program. TheG
is just my usual way of creating a no-op stage.Convert each digit to unary and put it on its own line.
Compute the triangular number on each line, by replacing each
1
with its prefix. We could also useM!&`1+
here, which gives us all suffixes of each line.Count all
1
s, which sums up all the triangular numbers and converts the result back to decimal.quelle
Ruby,
60 4742 bytes-13 bytes by @JustinMariner
-5 bytes by @GB
Try it online!
quelle
[*...]
) and change(k+1)
to-~k
to save a total of 5 bytes: Try it online! Additionally, you can save 8 more by switching to an anonymous lambda function: Try it online!.map
couldn't take arrays.Befunge-93 , 51 Bytes
Probieren Sie es online!
James Holderness hat mein Programm geschickt in eine 51-Byte-Form umgewandelt. Vielen Dank!
quelle
Aufdringlich ,
24222117 BytesProbieren Sie es online!
Erläuterung
quelle
Japt ,
1917 BytesÜbernimmt die Eingabe als einzelnes Elementarray.
Versuch es
quelle
R , 70 Bytes
Probieren Sie es online!
Gibt auch den ursprünglichen Wert zurück.
R , 80 Bytes
Probieren Sie es online!
Gibt den ursprünglichen Wert nicht zurück.
quelle
Lua , 91 Bytes
Probieren Sie es online!
quelle
05AB1E ,
2012 Bytes2 Bytes gespart dank Caird Coinheringaahing
Probieren Sie es online!
Erläuterung
(alte Version)
quelle
JavaScript,
61-57BytesProbieren Sie es online!
quelle
Python 2 , 69 Bytes
Probieren Sie es online!
quelle
Kohle , 18 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
Gleichstrom , 62 Bytes
Probieren Sie es online!
quelle
k , 19 Bytes
Es ist nicht überraschend, dass es ähnlich zu den bereits veröffentlichten APL- und J-Lösungen funktioniert
quelle
Gelee , 7 Bytes
Probieren Sie es online!
DRFSµÐĿ
: Vollständiges Programm / monadischer Link.ÐĿ
: Schleife, bis Ergebnisse nicht mehr eindeutig sind (wenn etwas anderes als 1 zweimal auftreten würde, hat die angegebene Eingabe kein definiertes Ergebnis, da sie niemals 1 erreichen würde).D
: Konvertiert von Integer zu Dezimal.R
: Bereich (1-indiziert). Vektorisiert.F
: Flatten undS
: Sum (µ
erstellt nur eine neue monadische Kette)quelle
Gleichstrom, 31 Bytes
Die Funktion
m
berechnet die Digitangularfunktion ihrer Eingabe.f
Wiederholt dies, bis das Ergebnis 1 erreicht.Beachten Sie, dass wir den Eingaberadix verwenden, um Ziffern zu extrahieren - dies bedeutet, dass es in jedem Basissystem funktioniert, nicht nur in Dezimalzahlen.
Demo
quelle
Python 2 , 76 Bytes
Probieren Sie es online!
quelle
Neim , 8 Bytes
Erläuterung:
Probieren Sie es online!
Formatierte Ausgabe
quelle
D , 140 Bytes
Probieren Sie es online!
quelle
PHP, 71 + 1 Bytes
Laufen Sie als Pipe mit
-nR
oder versuchen Sie es online . (benötigt PHP 5.3 oder neuer für den Elvis-Operator)quelle
A?:B
: Wenn A wahr ist, dann A else BAdd ++ , 32 Bytes
Probieren Sie es online!
Gibt den ersten Wert nicht aus
Wie es funktioniert
quelle
Perl 6 , 36 Bytes
Probieren Sie es online!
Schließt die Eingabenummer in die Ausgabeliste ein.
quelle