Inspiré par http://xkcd.com/710/, voici un code golf pour cela.
Le défi
Étant donné un entier positif supérieur à 0, imprimez la séquence de grêle pour ce nombre.
La séquence de grêle
Voir Wikipedia pour plus de détails.
- Si le nombre est pair, divisez-le par deux.
- Si le nombre est impair, triplez-le et ajoutez-en un.
Répétez ceci avec le nombre produit jusqu'à ce qu'il atteigne 1. (s'il continue après 1, il ira dans une boucle infinie de 1 -> 4 -> 2 -> 1...
)
Parfois, le code est le meilleur moyen d'expliquer, alors voici quelques-uns de Wikipedia
function collatz(n)
show n
if n > 1
if n is odd
call collatz(3n + 1)
else
call collatz(n / 2)
Ce code fonctionne, mais j'ajoute un défi supplémentaire. Le programme ne doit pas être vulnérable aux débordements de pile . Il doit donc soit utiliser l'itération, soit la récursivité de queue.
En outre, des points bonus pour savoir s'il peut calculer de grands nombres et que la langue ne l'a pas déjà implémenté. (ou si vous réimplémentez la prise en charge des grands nombres en utilisant des entiers de longueur fixe)
Cas de test
Number: 21
Results: 21 -> 64 -> 32 -> 16 -> 8 -> 4 -> 2 -> 1
Number: 3
Results: 3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
En outre, le code golf doit inclure une entrée et une sortie utilisateur complètes.