Mówi się, że funkcja ma cykl długości n, jeśli istnieje w jej domenie x taki, że f n (x) = x i f m (x) ≠ x dla 0 <m <n , gdzie indeks górny n oznacza n - złóż aplikację f . Zauważ, że cykl o długości 1 jest stałym punktem f (x) = x .
Twoim zadaniem jest zaimplementowanie funkcji bijectywnej od liczb całkowitych do siebie, która ma dokładnie jeden cykl o każdej długości dodatniej n . Funkcja bijectywna to korespondencja jeden do jednego, tzn. Każda liczba całkowita odwzorowana na dokładnie jeden raz. Posiadanie dokładnie jednego cyklu długości n oznacza, że istnieją dokładnie n różnych liczb x, dla których f n (x) = x i f m (x) ≠ x dla 0 <m <n .
Oto przykład, jak mogłaby wyglądać taka funkcja około 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 ...
Ten fragment zawiera cykle o długości od 1 do 5 :
n cycle
1 0
2 -2 1
3 -4 -3 -1
4 -5 6 3 7
5 -7 2 5 -6 4
...
Zauważ, że powyżej używam „funkcji” tylko w sensie matematycznym. Możesz napisać funkcję lub pełny program w wybranym przez siebie języku, pod warunkiem, że pobiera on jedną (całkowitą) liczbę całkowitą jako wejście i zwraca jedną (całkowitą) liczbę całkowitą. Jak zwykle możesz przyjmować dane wejściowe za pośrednictwem STDIN, argument wiersza poleceń, argument funkcji itp. I dane wyjściowe za pomocą STDOUT, wartości zwracanej funkcji lub argumentu funkcji (wyjściowej) itp.
Oczywiście wiele języków nie obsługuje (łatwo) liczb całkowitych o dowolnej precyzji. W porządku, jeśli twoja implementacja działa tylko w zakresie rodzimego typu liczb całkowitych twojego języka, o ile obejmuje on co najmniej zakres [-127, 127] i działałby dla dowolnych liczb całkowitych, gdyby typ liczb całkowitych języka został zastąpiony przez dowolne- precyzyjne liczby całkowite.
Obowiązują standardowe zasady gry w golfa .