Palindrome Reversal-Addition
Der Vorgang des Hinzufügens der Umkehrung ist der Vorgang, bei dem eine Zahl zur Umkehrung hinzugefügt wird, bis die erzeugte Zahl ein Palindrom ist. Wenn wir zum Beispiel mit 68 beginnen, wäre der Prozess:
68 + 86 => 154 + 451 => 605 + 506 => 1111
Wie Sie sehen, dauerte dies 3 Additionen, um zu einer palindromischen Zahl zu gelangen. Wenn wir anfangen 89
würden, bräuchten wir 24 Stufen (die Sie hier sehen können ).
Der Weltrekord für die meisten Schritte, die unternommen wurden, bevor ein Palindrom erreicht wurde, liegt bei 261, was für die Zahl 1186060307891929990
gilt und eine Zahl ergibt, die größer als 10 118 ist . Es gab jedoch einige Zahlen, für die wir kein Palindrom erhalten konnten. Diese werden Lychrel-Nummern genannt .
Da wir in Basis 10 arbeiten, können wir sie eigentlich nur als Kandidaten bezeichnen, da es keinen Beweis dafür gibt, dass diese Zahlen niemals ein Palindrom erreichen. Der kleinste Lychrel-Kandidat zur Basis 10 ist beispielsweise 196 und hat weit über eine Milliarde Iterationen durchlaufen. Wenn das Palindrom existiert, ist es viel größer als 10 10 8.77 . Wenn zum Vergleich so viele Einsen in Atome eingeschrieben wären, bräuchten wir 2.26772 × 10 588843575 Universen mit Atomen, um sie auszuschreiben, vorausgesetzt, sie existieren.
Deine Aufgabe
Erstellen Sie ein Programm oder eine Funktion, die eine Ganzzahleingabe akzeptiert und die Anzahl der Schritte ausgibt oder ausgibt, die zum Erreichen eines Palindroms erforderlich sind. Sie müssen sich nicht mit Lychrel-Kandidaten auseinandersetzen (dh Ihr Programm darf bei einem Lychrel-Kandidaten entweder einen Fehler auslösen oder für immer ausgeführt werden).
Testfälle:
f(0) => 0
f(11) => 0
f(89) => 24
f(286) => 23
f(196196871) => 45
f(1005499526) => 109
f(1186060307891929990) => 261
Regeln
Boni
- Wenn Sie jeden formatierten Additionsschritt ausdrucken
n + rev(n) = m
, können Sie Ihre Punktzahl mit 0,75 multiplizieren . Die Summen sollten vor der Anzahl der Schritte ausgedruckt werden. - Wenn Ihr Code erkennt, ob eine Zahl ein Lychrel-Kandidat ist, können Sie Ihre Punktzahl mit 0,85 multiplizieren . In diesem Fall ist es ausreichend anzunehmen, dass alles, was mehr als 261 Iterationen benötigt, ein Lychrel-Kandidat ist. Geben Sie entweder nichts zurück oder alles, was keine Zahl ist, die für eine korrekte Antwort gehalten werden kann (usw.: eine beliebige Zeichenfolge oder eine Zahl, die nicht im Bereich von 0 bis 261 liegt). Jeder Fehler zählt nicht als gültige Ausgabe (z. B. maximale Rekursionstiefe überschritten) und kann nicht für die Erkennung verwendet werden.
- Wenn Sie beide Boni erfüllen, multiplizieren Sie mit 0,6 .
Das ist Code-Golf , also gewinnt die geringste Anzahl von Bytes.
Dieses Code-Snippet zeigt eine Beispiellösung in Python 3 mit beiden Boni.
def do(n,c=0,s=''):
m = str(n)
o = m[::-1]
if c > 261:
return "Lychrel candidate"
if m == o:
print(s)
return c
else:
d = int(m)+int(o)
s+="%s + %s = %s"%(m,o,str(d))
return do(d,c+1,s)
*0.6
Bonus über den anderen? Oder ist es nur das?
10 + 01 = 11
oder 10 + 1 = 11
oder ist es an uns?
262
?