Juguemos un juego para un jugador llamado Jump the array . Para jugar, solo necesitas una variedad de enteros, por ejemplo a
. Comienzas en alguna posición i
, y en cada turno, saltas a una nueva posición. A su vez n
,
- si
n
es par, saltas a la posición absolutaa[i] mod length(a)
, - si
n
es extraño, saltas a la posición relativa(i + a[i]) mod length(a)
.
La indexación de la matriz comienza en cero. Puedes contar el primer salto como turno 0
o turno 1
, lo que da un juego diferente. Dado que el espacio de estado del juego es finito (su movimiento está determinado por su posición y la paridad del número de turno), por supuesto, eventualmente entrará en un bucle de longitud uniforme. Denote por loop(a, i, b)
la longitud de este bucle, cuando el primer salto se cuenta como giro b
.
Entrada
Un conjunto no entero a
de enteros para jugar.
Salida
El número máximo p
tal que, cuando comience en alguna posición i
y cuente el primer turno como 0
o 1
, eventualmente ingrese un bucle de longitud 2 * p
. En otras palabras, su salida es el número
max { loop(a, i, b)/2 : i in [0 .. length(a)-1], b in [0,1] }
Reglas
Puedes dar una función o un programa completo. El recuento de bytes más pequeño gana, y las lagunas estándar no se permiten.
Casos de prueba
[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
se define como siempre positivo ( -1 mod 5 == 4
) a diferencia de C. ¿Es ese el caso?
mod
, que siempre da resultados no negativos.