Давайте пограємо в гру для одного гравця, яку називають стрибком масиву . Для відтворення, скажімо, потрібен лише масив цілих чисел a
. Ви починаєте з якоїсь позиції i
, і на кожному повороті ви переходите до нової позиції. У свою чергу n
,
- якщо
n
це рівно, ви переходите до абсолютного положенняa[i] mod length(a)
, - якщо
n
це не дивно, ви стрибаєте у відносне положення(i + a[i]) mod length(a)
.
Індексація масиву починається з нуля. Ви можете рахувати перший стрибок як поворот 0
або поворот 1
, які дають іншу гру. Оскільки простір стану гри є обмеженим (ваш хід визначається вашою позицією та паритетом числа повороту), ви, звичайно, введете цикл рівної довжини. Позначається loop(a, i, b)
довжиною цієї петлі, коли перший стрибок рахується як поворот b
.
Вхідні дані
Непорожній масив a
цілих чисел для гри в гру.
Вихідні дані
Максимальна кількість p
таких, що, починаючи з якоїсь позиції i
і рахуючи перший виток як 0
або 1
, ви, врешті, вводите цикл довжини 2 * p
. Іншими словами, ваш вихід - це число
max { loop(a, i, b)/2 : i in [0 .. length(a)-1], b in [0,1] }
Правила
Ви можете надати функцію або повну програму. Найменший байт виграє, а стандартні лазівки заборонені.
Тестові справи
[0] -> 1
[-213] -> 1
[1,3,12,-1,7] -> 1
[2,3,5,7,9,11,13,17,19] -> 2
[-2,3,-5,7,-9,11,-13,17,-19,23,-27] -> 3
[0,2,5,4,-9,0,-1,1,-1,1,-6] -> 4
mod
це визначається як завжди позитивний ( -1 mod 5 == 4
) на відміну від C. Це так?
mod
, який завжди дає негативні результати.