Vamos jogar um jogo para um jogador chamado jump the array . Para jogar, você só precisa de uma matriz de números inteiros, digamos a
. Você começa em alguma posição i
e, em cada turno, salta para uma nova posição. Por sua vez n
,
- se
n
for par, você pula para a posição absolutaa[i] mod length(a)
, - se
n
for ímpar, você pula para a posição relativa(i + a[i]) mod length(a)
.
A indexação da matriz começa em zero. Você pode contar o primeiro salto como turno 0
ou turno 1
, o que dá um jogo diferente. Como o espaço de estado do jogo é finito (sua jogada é determinada pela sua posição e pela paridade do número do turno), é claro que você finalmente entrará em um loop de comprimento uniforme. Indique pela loop(a, i, b)
duração desse loop, quando o primeiro salto é contado como turno b
.
Entrada
Uma matriz não vazia a
de números inteiros para jogar.
Resultado
O número máximo p
que, ao iniciar em alguma posição i
e contar o primeiro turno como um 0
ou outro 1
, você eventualmente insere um loop de comprimento 2 * p
. Em outras palavras, sua saída é o número
max { loop(a, i, b)/2 : i in [0 .. length(a)-1], b in [0,1] }
Regras
Você pode atribuir uma função ou um programa completo. A menor contagem de bytes vence e as brechas padrão não são permitidas.
Casos de teste
[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
seja definido como sempre positivo ( -1 mod 5 == 4
), diferentemente de C. É esse o caso?
mod
, que sempre fornece resultados não negativos.