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 int
o float
puede 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.