Zdefiniuj funkcję f (n) dla dodatniej liczby całkowitej n w następujący sposób:
- n / 2 , jeśli n jest parzyste
- 3 * n + 1 , jeśli n jest nieparzyste
Jeśli wielokrotnie zastosujesz tę funkcję do dowolnego n większego niż 0, wynik zawsze wydaje się zbieżny do 1 (chociaż nikt nie był jeszcze w stanie tego udowodnić). Ta właściwość jest znana jako hipoteza Collatza .
Zdefiniuj czas zatrzymania liczby całkowitej jako liczbę przypadków, w których musisz przejść przez funkcję Collatz f, zanim osiągnie 1. Oto czasy zatrzymania pierwszych 15 liczb całkowitych:
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
Zadzwońmy do dowolnego zestawu numerów o tym samym czasie zatrzymania kuzyni Collatz . Na przykład 5 i 32 są kuzynami Collatz, z czasem zatrzymania wynoszącym 5.
Twoje zadanie: napisanie programu lub funkcji, która przyjmuje nieujemną liczbę całkowitą i generuje zestaw kuzynów Collatz, których czas zatrzymania jest równy tej liczbie całkowitej.
Wkład
Nieujemna liczba całkowita S, podana przez STDIN, ARGV lub argument funkcji.
Wydajność
Lista wszystkich liczb, których czas zatrzymania wynosi S, posortowanych w porządku rosnącym . Lista może być wyprowadzana przez twój program lub zwracana lub wyprowadzana przez twoją funkcję. Format wyjściowy jest elastyczny: separacja spacji, separacja nowego wiersza lub dowolny standardowy format listy twojego języka jest w porządku, pod warunkiem, że liczby są łatwe do odróżnienia od siebie.
Wymagania
Twoje zgłoszenie musi dawać prawidłowe wyniki dla dowolnego S ≤ 30. Powinno ono zakończyć się w ciągu sekund lub minut, a nie godzin lub dni.
Przykłady
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
Oto streszczenie wyniku dla S = 30 .
To jest golf-golf : wygrywa najkrótszy program w bajtach. Powodzenia!