Definieren Sie die Funktion f (n) für eine positive ganze Zahl n wie folgt:
- n / 2 , wenn n gerade ist
- 3 * n + 1 , wenn n ungerade ist
Wenn Sie diese Funktion wiederholt auf n größer als 0 anwenden , scheint das Ergebnis immer auf 1 zu konvergieren (obwohl dies noch niemand beweisen konnte). Diese Eigenschaft wird als Collatz-Vermutung bezeichnet .
Definieren Sie die Stoppzeit einer Ganzzahl als die Häufigkeit, mit der Sie die Collatz-Funktion f durchlaufen müssen, bevor sie 1 erreicht. Hier sind die Stoppzeiten der ersten 15 Ganzzahlen:
1 0
2 1
3 7
4 2
5 5
6 8
7 16
8 3
9 19
10 6
11 14
12 9
13 9
14 17
15 17
Nennen wir einen beliebigen Satz von Nummern mit denselben Haltezeiten wie die Cousins von Collatz . Zum Beispiel sind 5 und 32 Cousins von Collatz mit einer Haltezeit von 5.
Ihre Aufgabe: Schreiben Sie ein Programm oder eine Funktion, die eine nicht negative Ganzzahl verwendet und die Menge der Collatz-Cousins generiert, deren Stoppzeit dieser Ganzzahl entspricht.
Eingang
Eine nichtnegative Ganzzahl S, angegeben über STDIN, ARGV oder Funktionsargument.
Ausgabe
Eine Liste aller Zahlen , deren Stoppzeit ist S, sortiert in aufsteigender Reihenfolge. Die Liste kann von Ihrem Programm ausgegeben oder von Ihrer Funktion zurückgegeben oder ausgegeben werden. Das Ausgabeformat ist flexibel: Durch Leerzeichen oder Zeilenumbrüche getrennt oder jedes Standard-Listenformat Ihrer Sprache ist in Ordnung, solange die Zahlen leicht voneinander zu unterscheiden sind.
Bedarf
Ihre Einreichung muss für S ≤ 30 korrekte Ergebnisse liefern. Sie sollte in Sekunden oder Minuten und nicht in Stunden oder Tagen abgeschlossen sein.
Beispiele
0 -> 1
1 -> 2
5 -> 5, 32
9 -> 12, 13, 80, 84, 85, 512
15 -> 22, 23, 136, 138, 140, 141, 150, 151, 768, 832, 848, 852, 853, 904, 906, 908, 909, 5120, 5376, 5440, 5456, 5460, 5461, 32768
Hier ist eine Zusammenfassung der Ausgabe für S = 30 .
Das ist Code-Golf : Das kürzeste Programm in Bytes gewinnt. Viel Glück!