Yerel süreler
Boş olmayan dize atın s . Yerel süresi ve s indeksinde ı en küçük pozitif tam sayı olduğu , n her biri için bu tür 0 ≤ k <n , elimizdeki s [i + k] = s [i-n + k] her iki tarafın da tanımlandığı zaman. Alternatif olarak, w olmayan bir dizginin minimum uzunluğu, böylece birleştirici ww , s'nin yanına yerleştirilirse , w'nin ikinci kopyası , s indeksi i'de başlarsa , iki dize üst üste geldiklerinde hemfikir olurlar.
Örnek olarak, s = "abaabbab" yerel periyodunu (0 tabanlı) indeks 2'de hesaplayalım .
- N = 1 : sonra s [2 + 0] ≠ s [2-1 + 0] 'yu deneyin , bu nedenle bu seçim doğru değildir.
- N = 2'yi deneyin : o zaman s [2 + 0] = s [2-2 + 0] ancak s [2 + 1] ≠ s [2-2 + 1] , bu da doğru değil.
- N = 3'ü deneyin : o zaman s [2 + 0-3] tanımlanmamıştır, s [2 + 1] = s [2-3 + 1] ve s [2 + 2] = s [2-3 + 2] . Böylece yerel dönem 3'tür.
Burada, ikinci tanımı kullanarak yerel periyotların görselleştirilmesi, w'nin iki kopyası arasına noktalı virgül eklenmesi amacıyla açıklık kazandırılmıştır:
index a b a a b b a b period
0 a;a 1
1 b a;b a 2
2 a a b;a a b 3
3 a;a 1
4 b b a b a a;b b a b a a 6
5 b;b 1
6 a b b;a b b 3
7 b a;b a 2
Not, ağırlık , zorunlu olarak bir alt değildir s . Bu, burada index-4 durumunda olur.
Görev
Girişiniz boş olmayan bir dize s küçük ASCII karakter. İstenirse bir karakter listesi olarak alınabilir. Çıktınız yerel dönemini içeren liste olacaktır s onun endeksleri her birinde. Yukarıdaki örnekte, doğru çıktı [1,2,3,1,6,1,3,2] olacaktır .
Her dilde en düşük bayt sayısı kazanır. Standart kod golf kuralları geçerlidir.
Test senaryoları
a -> [1]
hi -> [1, 2]
www -> [1, 1, 1]
xcxccxc -> [1, 2, 2, 5, 1, 3, 2]
abcbacb -> [1, 4, 7, 7, 7, 3, 3]
nininini -> [1, 2, 2, 2, 2, 2, 2, 2]
abaabbab -> [1, 2, 3, 1, 6, 1, 3, 2]
woppwoppw -> [1, 4, 4, 1, 4, 4, 4, 1, 4]
qwertyuiop -> [1, 10, 10, 10, 10, 10, 10, 10, 10, 10]
deededeededede -> [1, 3, 1, 5, 2, 2, 5, 1, 12, 2, 2, 2, 2, 2]
abababcabababcababcabababcaba -> [1, 2, 2, 2, 2, 7, 7, 7, 7, 2, 2, 2, 19, 19, 5, 5, 2, 5, 5, 12, 12, 2, 2, 2, 7, 7, 5, 5, 2]
;
). Bu, önde gelen 1'den kurtulur.
qwertyuiop
, w döndürülmüş bir versiyonu olacaktırqwertyuiop
. Ayrıca indeks 4'teki örneğe bakınız: w mutlaka s'nin bir alt dizesi değildir .