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 ie, em cada turno, salta para uma nova posição. Por sua vez n,
- se
nfor par, você pula para a posição absolutaa[i] mod length(a), - se
nfor í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 0ou 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 ade números inteiros para jogar.
Resultado
O número máximo pque, ao iniciar em alguma posição ie contar o primeiro turno como um 0ou 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
modseja definido como sempre positivo ( -1 mod 5 == 4), diferentemente de C. É esse o caso?
mod, que sempre fornece resultados não negativos.