Jouons à un jeu à un joueur appelé sauter le tableau . Pour jouer, vous n'avez besoin que d'un tableau d'entiers, par exemple a
. Vous commencez à une certaine position i
et à chaque tour, vous sautez à une nouvelle position. À son tour n
,
- si
n
c'est pair, vous sautez en position absoluea[i] mod length(a)
, - si
n
est impair, vous sautez à la position relative(i + a[i]) mod length(a)
.
L'indexation du tableau commence à zéro. Vous pouvez compter le premier saut comme un tour 0
ou un tour 1
, ce qui donne un jeu différent. Puisque l'espace d'état du jeu est fini (votre coup est déterminé par votre position et la parité du nombre de tours), vous finirez bien sûr par entrer dans une boucle de longueur égale. Indique loop(a, i, b)
la longueur de cette boucle, lorsque le premier saut est compté comme un tour b
.
Contribution
Un tableau non vide a
d'entiers avec lesquels jouer.
Production
Le nombre maximum p
tel que, lorsque vous commencez sur une position i
et comptez le premier tour comme l'un 0
ou l' autre 1
, vous entrez finalement une boucle de longueur 2 * p
. En d'autres termes, votre sortie est le nombre
max { loop(a, i, b)/2 : i in [0 .. length(a)-1], b in [0,1] }
Règles
Vous pouvez donner une fonction ou un programme complet. Le plus petit nombre d'octets gagne et les failles standard sont interdites.
Cas de 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
est défini comme toujours positif ( -1 mod 5 == 4
) contrairement à C. Est-ce le cas?
mod
, qui donne toujours des résultats non négatifs.