Se dice que una función tiene un ciclo de longitud n si existe una x en su dominio tal que f n (x) = x y f m (x) ≠ x para 0 <m <n , donde el superíndice n denota n - pliegue la aplicación de f . Tenga en cuenta que un ciclo de longitud 1 es un punto fijo f (x) = x .
Su tarea es implementar una función biyectiva de los enteros a sí mismos, que tiene exactamente un ciclo de cada longitud positiva n . Una función biyectiva es una correspondencia uno a uno, es decir, cada entero asignado exactamente a una vez. Tener exactamente un ciclo de longitud n significa que hay exactamente n números distintos x para los cuales f n (x) = x y f m (x) ≠ x para 0 <m <n .
Aquí hay un ejemplo de cómo se vería tal función alrededor de x = 0 :
x ... -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 ...
f(x) ... 2 4 6 -3 -1 1 -4 0 -2 5 7 -7 -6 3 -5 ...
Este extracto contiene ciclos de longitud 1 a 5 :
n cycle
1 0
2 -2 1
3 -4 -3 -1
4 -5 6 3 7
5 -7 2 5 -6 4
...
Tenga en cuenta que anteriormente estoy usando "función" solo en el sentido matemático. Puede escribir una función o un programa completo en el idioma que elija, siempre que tome un solo entero (con signo) como entrada y devuelva un solo entero (con signo). Como de costumbre, puede recibir información a través de STDIN, argumento de línea de comando, argumento de función, etc. y salida a través de STDOUT, valor de retorno de función o argumento de función (fuera), etc.
Por supuesto, muchos idiomas no admiten (fácilmente) enteros de precisión arbitraria. Está bien si su implementación solo funciona en el rango del tipo de entero nativo de su idioma, siempre que cubra al menos el rango [-127, 127] y que funcione para enteros arbitrarios si el tipo de entero del idioma se reemplaza por arbitrario- enteros de precisión.
Se aplican reglas estándar de código de golf .