Se puede decir que una función (o programa) que toma entradas y proporciona salidas tiene un ciclo si la llamada a la función en su propia salida alcanza eventualmente el número original. Por ejemplo, tome la siguiente función:
Input: n 1 2 3 4 5 6
Output: f(n) 5 7 1 3 4 9
Si empezamos con 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.
Esto esta escrito (1 5 4 3). Dado que hay 4 números únicos en este bucle, este es un ciclo de longitud 4.
Su desafío es escribir un programa o función que tenga ciclos de todas las longitudes posibles. Es decir, debe haber un ciclo de longitud 1, de longitud 2, y así sucesivamente.
Además, su función / programa debe ser de enteros positivos a enteros positivos, y debe ser biyectivo , lo que significa que debe haber exactamente un valor de entrada para cada valor de salida posible, sobre todos los enteros positivos. Para decirlo de otra manera, la función / programa debe calcular una permutación de los enteros positivos.
Detalles: Se permite cualquier sistema de entrada / salida estándar, incluidos STDIN, STDOUT, argumento de función, retorno, etc. Lagunas estándar prohibidas.
No necesita preocuparse por las limitaciones de sus tipos de datos: las propiedades anteriores solo deben mantenerse bajo el supuesto de que uno into floatpuede contener cualquier valor, por ejemplo.
No hay restricciones en el comportamiento de la función en las entradas que no son enteros positivos, y esas entradas / salidas serán ignoradas.
La puntuación es el código de golf en bytes, el código más corto gana.
