Si dice che una funzione ha un ciclo di lunghezza n se esiste una x nel suo dominio tale che f n (x) = x e f m (x) ≠ x per 0 <m <n , dove l'apice n indica n - piega l'applicazione di f . Si noti che un ciclo di lunghezza 1 è un punto fisso f (x) = x .
Il tuo compito è implementare una funzione biiettiva dagli interi a se stessi, che ha esattamente un ciclo di ogni lunghezza positiva n . Una funzione biiettiva è una corrispondenza uno a uno, ovvero ogni numero intero mappato esattamente una volta. Avere esattamente un ciclo di lunghezza n significa che ci sono esattamente n numeri distinti x per i quali f n (x) = x e f m (x) ≠ x per 0 <m <n .
Ecco un esempio di come potrebbe apparire una tale funzione attorno a 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 ...
Questo estratto contiene cicli di lunghezza da 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
...
Si noti che sopra sto usando "funzione" solo in senso matematico. È possibile scrivere una funzione o un programma completo nella lingua prescelta, purché richieda un singolo numero intero (con segno) come input e restituisca un numero intero (con segno). Come al solito è possibile prendere input tramite STDIN, argomento della riga di comando, argomento della funzione ecc. E output tramite STDOUT, valore di ritorno della funzione o argomento della funzione (out) ecc.
Naturalmente, molte lingue non supportano (facilmente) numeri interi di precisione arbitraria. Va bene se l'implementazione funziona solo sull'intervallo del tipo intero nativo della tua lingua, a condizione che copra almeno l'intervallo [-127, 127] e che funzionerebbe per interi arbitrari se il tipo intero della lingua fosse sostituito con arbitrario- numeri interi di precisione.
Si applicano le regole standard del code-golf .