Diziyi atlama adlı tek oyunculu bir oyun oynayalım . Oynamak için, sadece bir dizi tamsayıya ihtiyacınız var a. Bir pozisyonda başlarsınız ive her turda yeni bir pozisyona atlarsınız. Sırayla n,
- eğer
neşitse, mutlak pozisyona atlarsınıza[i] mod length(a), - eğer
ngarip, göreli konuma atlamak(i + a[i]) mod length(a).
Dizi indeksleme sıfırdan başlar. İlk atlamayı farklı bir oyun veren dönüş 0veya dönüş olarak sayabilirsiniz 1. Oyunun durum alanı sınırlı olduğu için (hareketiniz pozisyonunuza ve dönüş numarasının paritesine göre belirlenir), elbette sonunda eşit uzunlukta bir döngü gireceksiniz. loop(a, i, b)İlk atlama dönüş olarak sayıldığında, bu döngünün uzunluğunu belirtin b.
Giriş
aOyunu oynamak için boş bir tamsayı dizisi .
Çıktı
Maksimum sayı p, bir konuma başlarken ive ilk dönüşü ya 0da olarak sayarken, 1sonunda bir uzunluk döngüsü girersiniz 2 * p. Başka bir deyişle, çıktınız sayıdır
max { loop(a, i, b)/2 : i in [0 .. length(a)-1], b in [0,1] }
kurallar
Bir işlev veya tam bir program verebilirsiniz. En küçük bayt sayısı kazanır ve standart boşluklara izin verilmez.
Test senaryoları
[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
modher zaman pozitif ( -1 mod 5 == 4) olarak tanımlandığını varsayalım.
modher zaman olumsuz olmayan sonuçlar veren Haskell tarzı kullanıyorum .