Une fonction (ou un programme) qui prend des entrées et fournit des sorties peut être considérée comme ayant un cycle si l'appel de la fonction sur sa propre sortie à plusieurs reprises atteint finalement le numéro d'origine. Par exemple, prenez la fonction suivante:
Input: n 1 2 3 4 5 6
Output: f(n) 5 7 1 3 4 9
Si nous commençons par n=1
, f(n)=5
, f(f(n))=f(5)=4
, f(f(f(n)))=f(4)=3
, f(f(f(f(n))))=f(3)=1
.
C'est écrit (1 5 4 3)
. Puisqu'il y a 4 nombres uniques dans cette boucle, c'est un cycle de longueur 4.
Votre défi est d'écrire un programme ou une fonction qui a des cycles de toutes les longueurs possibles. Autrement dit, il doit y avoir un cycle de longueur 1, de longueur 2, etc.
De plus, votre fonction / programme doit aller des entiers positifs aux entiers positifs, et il doit être bijectif , ce qui signifie qu'il doit y avoir exactement une valeur d'entrée pour chaque valeur de sortie possible, sur tous les entiers positifs. En d'autres termes, la fonction / programme doit calculer une permutation des entiers positifs.
Détails: Tout système d'entrée / sortie standard est autorisé, y compris STDIN, STDOUT, argument de fonction, retour, etc. Les failles standard sont interdites.
Vous n'avez pas à vous soucier des limites de vos types de données - les propriétés ci-dessus ne doivent être conservées qu'en supposant qu'une int
ou float
peut contenir n'importe quelle valeur, par exemple.
Il n'y a aucune restriction sur le comportement de la fonction sur les entrées qui ne sont pas des entiers positifs, et ces entrées / sorties seront ignorées.
La notation est le golf de code en octets, le code le plus court gagne.