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
nes par, saltas a la posición absolutaa[i] mod length(a), - si
nes 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 0o 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 ade enteros para jugar.
Salida
El número máximo ptal que, cuando comience en alguna posición iy cuente el primer turno como 0o 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
modse define como siempre positivo ( -1 mod 5 == 4) a diferencia de C. ¿Es ese el caso?
mod, que siempre da resultados no negativos.