Définissez la fonction f (n) pour un entier positif n comme suit:
- n / 2 , si n est pair
- 3 * n + 1 , si n est impair
Si vous appliquez à plusieurs reprises cette fonction à tout n supérieur à 0, le résultat semble toujours converger vers 1 (bien que personne n'ait encore pu le prouver). Cette propriété est connue sous le nom de conjecture de Collatz .
Définissez le temps d'arrêt d' un entier comme le nombre de fois que vous devez le passer par la fonction Collatz f avant qu'il n'atteigne 1. Voici les temps d'arrêt des 15 premiers entiers:
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
Appelons n'importe quel ensemble de numéros avec les mêmes cousins Collatz de temps d'arrêt . Par exemple, 5 et 32 sont des cousins Collatz, avec un temps d'arrêt de 5.
Votre tâche: écrire un programme ou une fonction qui prend un entier non négatif et génère l'ensemble des cousins Collatz dont le temps d'arrêt est égal à cet entier.
Contribution
Un entier non négatif S, donné via STDIN, ARGV ou un argument de fonction.
Production
Une liste de tous les numéros dont le temps d' arrêt est S, triée en ordre croissant ordre. La liste peut être sortie par votre programme, ou retournée ou sortie par votre fonction. Le format de sortie est flexible: séparé par des espaces, séparé par des sauts de ligne ou par tout autre format de liste standard de votre langue, tant que les chiffres sont facilement distinguables les uns des autres.
Exigences
Votre soumission doit donner des résultats corrects pour tout S ≤ 30. Elle doit se terminer en quelques secondes ou minutes, et non en heures ou jours.
Exemples
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
Voici un résumé de la sortie pour S = 30 .
C'est le code-golf : le programme le plus court en octets gagne. Bonne chance!