Si può dire che una funzione (o programma) che accetta input e fornisce output abbia un ciclo se chiamare la funzione sul proprio output alla fine raggiunge ripetutamente il numero originale. Ad esempio, prendi la seguente funzione:
Input: n 1 2 3 4 5 6
Output: f(n) 5 7 1 3 4 9
Se cominciamo 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.
Questo è scritto (1 5 4 3). Poiché ci sono 4 numeri univoci in questo ciclo, questo è un ciclo di lunghezza 4.
La tua sfida è scrivere un programma o una funzione che abbia cicli di ogni possibile lunghezza. Cioè, ci deve essere un ciclo di lunghezza 1, di lunghezza 2 e così via.
Inoltre, la tua funzione / programma deve essere dagli interi positivi agli interi positivi e deve essere biiettiva , il che significa che deve esserci esattamente un valore di input per ogni possibile valore di output, su tutti i numeri interi positivi. Per dirla in altro modo, la funzione / programma deve calcolare una permutaione degli interi positivi.
Dettagli: è consentito qualsiasi sistema di input / output standard, inclusi STDIN, STDOUT, argomento della funzione, ritorno, ecc. Sono vietate le scappatoie standard.
Non è necessario preoccuparsi delle limitazioni dei tipi di dati: le proprietà sopra riportate devono essere valide solo supponendo che un into floatpossa contenere qualsiasi valore, ad esempio.
Non ci sono restrizioni sul comportamento della funzione sugli ingressi che non sono numeri interi positivi e tali ingressi / uscite verranno ignorati.
Il punteggio è il golf del codice in byte, il codice più corto vince.
