Inspiriert von http://xkcd.com/710/ ist hier ein Code Golf dafür.
Die Herausforderung
Bei einer positiven Ganzzahl größer als 0 drucken Sie die Hagelkornsequenz für diese Zahl aus.
Die Hagelkörner-Sequenz
Siehe Wikipedia für weitere Details.
- Wenn die Zahl gerade ist, teilen Sie sie durch zwei.
- Wenn die Zahl ungerade ist, verdreifachen Sie sie und fügen Sie eine hinzu.
Wiederholen Sie dies mit der erzeugten Zahl, bis es 1 erreicht. (Wenn es nach 1 fortgesetzt wird, wird es in einer Endlosschleife von 1 -> 4 -> 2 -> 1...
)
Manchmal ist Code der beste Weg, um dies zu erklären. Hier sind einige aus Wikipedia
function collatz(n)
show n
if n > 1
if n is odd
call collatz(3n + 1)
else
call collatz(n / 2)
Dieser Code funktioniert, aber ich füge eine zusätzliche Herausforderung hinzu. Das Programm darf nicht anfällig für Stapelüberläufe sein . Es muss also entweder Iteration oder Schwanzrekursion verwendet werden.
Außerdem Bonuspunkte, wenn es große Zahlen berechnen kann und die Sprache es noch nicht implementiert hat. (oder wenn Sie die Unterstützung großer Zahlen mit Ganzzahlen fester Länge erneut implementieren)
Testfall
Number: 21
Results: 21 -> 64 -> 32 -> 16 -> 8 -> 4 -> 2 -> 1
Number: 3
Results: 3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
Außerdem muss der Code Golf vollständige Benutzereingaben und -ausgaben enthalten.