Можна сказати, що функція (або програма), яка приймає входи та забезпечує виходи, має цикл, якщо виклик функції на власному виході неодноразово досягає початкового числа. Наприклад, візьміть таку функцію:
Input: n 1 2 3 4 5 6
Output: f(n) 5 7 1 3 4 9
Якщо ми починаємо з 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
.
Це написано (1 5 4 3)
. Оскільки в цьому циклі є 4 унікальних числа, це цикл довжиною 4.
Ваше завдання полягає в тому, щоб написати програму або функцію, яка має цикли будь-якої можливої довжини. Тобто повинен бути цикл довжиною 1, довжиною 2 тощо.
Крім того, ваша функція / програма повинна бути від натуральних цілих чисел до додатних цілих чисел, і вона повинна бути біективною , це означає, що для кожного можливого вихідного значення має бути рівно одне вхідне значення для всіх позитивних цілих чисел. Інакше кажучи, функція / програма повинна обчислити перестановку натуральних чисел.
Деталі: Дозволена будь-яка стандартна система вводу / виводу, включаючи STDIN, STDOUT, аргумент функції, повернення тощо. Стандартні лазівки заборонені.
Вам не потрібно турбуватися про обмеження типів даних - вищезазначені властивості потрібно мати лише під припущенням, що int
або, наприклад, float
може містити будь-яке значення.
Не існує обмежень щодо поведінки функції на входах, які не є додатними цілими числами, і ці входи / виходи будуть ігноровані.
Підрахунок балів - це гольф коду в байтах.