Кажуть, що функція має цикл довжини n, якщо в її області існує х такий, що f n (x) = x і f m (x) ≠ x при 0 <m <n , де суперечний n позначає n - складне застосування ф . Зауважимо, що цикл довжиною 1 є фіксованою точкою f (x) = x .
Ваше завдання - реалізувати бієктивну функцію від цілих чисел до самих себе, яка має рівно один цикл кожної додатної довжини n . Бієктивна функція - це відповідність один на один, тобто кожне ціле число, відображене точно на один раз. Маючи рівно один цикл довжини n означає, що існує точно n чітких чисел x, для яких f n (x) = x і f m (x) ≠ x при 0 <m <n .
Ось приклад того, як може виглядати така функція навколо 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 ...
Цей уривок містить цикли довжиною від 1 до 5 :
n cycle
1 0
2 -2 1
3 -4 -3 -1
4 -5 6 3 7
5 -7 2 5 -6 4
...
Зауважте, що вище я використовую "функцію" лише в математичному сенсі. Ви можете написати або функцію, або повну програму на обраній вами мові, якщо це буде введене одне (підписане) ціле число як вхідне значення і поверне одне (підписане) ціле число. Як завжди, ви можете приймати введення через STDIN, аргумент командного рядка, аргумент функції тощо та виводити через STDOUT, значення повернення функції або аргумент функції (out) тощо.
Звичайно, багато мов не (легко) підтримують цілі числа з довільною точністю. Добре, якщо ваша реалізація працює лише на діапазоні цілого цілого типу вашої мови, якщо вона охоплює принаймні діапазон [-127, 127], і що вона буде працювати для довільних цілих чисел, якби тип цілого числа мови був замінений на довільний- точні цілі числа.
Діють стандартні правила гольф-коду .