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 i
e 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 0
o 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 a
di numeri interi con cui giocare.
Produzione
Il numero massimo p
tale che, quando si inizia in una posizione i
e si considera il primo turno come uno 0
o 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
mod
sia definito come sempre positivo ( -1 mod 5 == 4
) a differenza di C. È così?
mod
, che dà sempre risultati non negativi.