Facciamo una partita a un giocatore chiamata jump the array . Per giocare, hai solo bisogno di una matrice di numeri interi, diciamo a. Inizi da una certa posizione ie ad ogni turno salti in una nuova posizione. A turno n,
- se
nè pari, salti in posizione assolutaa[i] mod length(a), - se
nè dispari, si salta nella posizione relativa(i + a[i]) mod length(a).
L'indicizzazione dell'array inizia da zero. Puoi contare il primo salto come turno 0o turno 1, che danno una partita diversa. Dato che lo spazio di stato del gioco è finito (la tua mossa è determinata dalla tua posizione e dalla parità del numero del turno), ovviamente alla fine entrerai in un ciclo di lunghezza pari. Indicato per loop(a, i, b)la lunghezza di questo ciclo, quando il primo salto viene conteggiato come turno b.
Ingresso
Un array non vuoto adi numeri interi con cui giocare.
Produzione
Il numero massimo ptale che, quando si inizia in una posizione ie si considera il primo turno come uno 0o 1, alla fine si immette un ciclo di lunghezza 2 * p. In altre parole, l'output è il numero
max { loop(a, i, b)/2 : i in [0 .. length(a)-1], b in [0,1] }
Regole
Puoi dare una funzione o un programma completo. Vince il conteggio di byte più piccolo e non sono consentite scappatoie standard.
Casi test
[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
modsia definito come sempre positivo ( -1 mod 5 == 4) a differenza di C. È così?
mod, che dà sempre risultati non negativi.