Definire la funzione f (n) per un numero intero positivo n come segue:
- n / 2 , se n è pari
- 3 * n + 1 , se n è dispari
Se si applica ripetutamente questa funzione a qualsiasi n maggiore di 0, il risultato sembra sempre convergere in 1 (anche se nessuno è ancora stato in grado di dimostrarlo). Questa proprietà è nota come congettura di Collatz .
Definisci il tempo di arresto di un numero intero come il numero di volte che devi passare attraverso la funzione Collatz f prima che raggiunga 1. Ecco i tempi di arresto dei primi 15 numeri interi:
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
Chiamiamo qualsiasi set di numeri con lo stesso tempo di arresto Cugini Collatz . Ad esempio, 5 e 32 sono cugini di Collatz, con un tempo di arresto di 5.
Il tuo compito: scrivi un programma o una funzione che accetta un numero intero non negativo e genera l'insieme dei cugini Collatz il cui tempo di arresto è uguale a quel numero intero.
Ingresso
Un numero intero non negativo S, fornito tramite STDIN, ARGV o argomento della funzione.
Produzione
Un elenco di tutti i numeri il cui tempo di arresto è S, ordinati in ordine crescente . L'elenco può essere emesso dal programma o restituito o emesso dalla funzione. Il formato di output è flessibile: va separato lo spazio, separato da una nuova riga o qualsiasi formato di elenco standard della tua lingua, purché i numeri siano facilmente distinguibili l'uno dall'altro.
Requisiti
L'invio deve fornire risultati corretti per qualsiasi S ≤ 30. Dovrebbe concludersi in secondi o minuti, non ore o giorni.
Esempi
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
Ecco una sintesi dell'output per S = 30 .
Questo è code-golf : vince il programma più breve in byte. In bocca al lupo!