(Das mag ziemlich klassisch sein, aber das ist mein erster Beitrag hier, also bin ich noch nicht bereit für das schicke Zeug)
Die Goodstein-Sequenz ist für eine Eingangsnummer wie folgt definiert:
Wähle eine Startnummer n , lasse b = 2 und wiederhole:
- schreibe n in der Notation der Erbbasis b
- Ersetze alle ( b ) s durch ( b +1) s in n und subtrahiere 1
- Ausgabe der neuen Dezimalauswertung von n
- Inkrement b
Die erbliche Basisnotation ist eine Zerlegung einer Zahl, bei der die Basis die größere Zahl ist, die auftreten soll. Beispiele:
83
in HB3:3^(3+1)+2
226
in HB2:2^(2^(2+1))+2^(2+1)+2
Goodstein-Sequenzen enden immer bei 0 , werden aber in der Regel sehr schnell groß, sodass nicht die vollständige Sequenz ausgegeben werden muss.
Aufgabe:
Wenn Sie eine Eingabenummer in einem angemessenen Format eingeben, müssen Sie die Goodstein-Sequenz für diese Nummer mindestens so lange ausgeben, bis sie 10 ^ 25 oder 0 erreicht
Beispiele:
Input: 3
Output: 3, 3, 3, 2, 1, 0
Input: 13
Output: 13, 108, 1279, 16092, 280711, 5765998, 134219479, 3486786855, 100000003325, 3138428381103, 106993205384715, 3937376385706415, 155568095557821073, 6568408355712901455, 295147905179352838943, 14063084452067725006646, 708235345355337676376131, 37589973457545958193377292
Input: 38
Output: 38, 22876792454990
Einzelheiten:
- Die eingegebene Nummer kann ein Array, eine Zeichenfolge oder eine Ganzzahl sein, solange sie in Dezimalzahlen angegeben ist
- Die Ausgabe erfolgt nach der gleichen Regel
- Die Trennung der Ausdrücke in der Ausgabe kann durch Leerzeichen, Zeilenumbrüche oder eine sinnvolle Trennung erfolgen
- Sobald die Sequenz größer als 10 ^ 25 wird, wird Ihr Programm möglicherweise normal beendet, es wird ein Fehler / eine Ausnahme ausgegeben oder es wird fortgesetzt (keine Einschränkung).
- Das ist Code-Golf , also gewinnt die kürzeste Antwort (in Bytes)
- Standardlücken sind natürlich verboten
- Python ungolfed Arbeitsbeispiel hier
int(q/base.b), q%base.b
muss seinq//base.b, q%base.b
(oder einfach nurdivmod(q, base.b)
), um Gleitkommafehler zu vermeiden.Antworten:
Pyth ,
2826 BytesDer abschließende Zeilenumbruch ist erheblich.
Probieren Sie es online! (Dieser Link enthält ein Extra
Q
, das von der aktuellen Version von Pyth nicht benötigt wird.)Wie es funktioniert
Es ist wichtig, dass dies
y
in jeder Schleifeniteration neu definiert wird, um zu verhindern, dass Änderungen an der globalen Variablen gespeichert werdenJ
.quelle
Haskell , 77 Bytes
(&2)
ist eine anonyme Funktion,Integer
die eine (möglicherweise sehr lange) Liste vonInteger
s aufnimmt und zurückgibt(&2) 13
.Probieren Sie es online! (schneidet an
10^25
.)Wie es funktioniert
(&2)
startet die Sequenz mit base2
.n&b
berechnet die Teilfolge beginnend mit der Zahln
und der Basisb
.n<0
, was in der Regel im nächsten Schritt passiertn==0
.n
der vom Ausdruck rekursiv zurückgegebenen Liste vorangestellt(0?n-1)&(b+1)
.?
ist ein lokaler Funktionsoperator.0?n
Gibt das Ergebnis der Konvertierungn
in eine erbliche Basis anb
, die dann überall erhöht wird.e
, die den aktuellen Exponenten verfolgt.e?n
konvertiert die Zahln*b^e
.0
Zeitpunktn==0
.n
durch die Basisb
.(e+1)?div n b
behandelt die Rekursion für den Quotienten und den nächsthöheren Exponenten.mod n b*(b+1)^0?e
behandelt den Rest (das ist die Ziffer, die dem aktuellen Exponenten entsprichte
), das Inkrement der Basis und konvertiert den aktuellen Exponenten erblich mit0?e
.quelle