Periode lokal
Ambil string yang tidak kosong s . The periode lokal dari s pada indeks i adalah yang terkecil bilangan bulat positif n sehingga untuk setiap 0 ≤ k <n ini, kami memiliki s [i + k] = s [i-n + k] setiap kali kedua sisi didefinisikan. Atau, itu adalah panjang minimum dari string kosong yang w sehingga jika gabungan ww ditempatkan di sebelah s sehingga salinan kedua w dimulai pada indeks i dari s , maka dua string setuju di mana pun mereka tumpang tindih.
Sebagai contoh, mari kita hitung periode lokal s = "abaabbab" di indeks (berbasis-0) 2.
- Coba n = 1 : lalu s [2 + 0] ≠ s [2-1 + 0] , jadi pilihan ini tidak benar.
- Coba n = 2 : lalu s [2 + 0] = s [2-2 + 0] tetapi s [2 + 1] ≠ s [2-2 + 1] , jadi ini juga tidak benar.
- Coba n = 3 : maka s [2 + 0-3] tidak didefinisikan, s [2 + 1] = s [2-3 + 1] dan s [2 + 2] = s [2-3 + 2] . Jadi periode lokal adalah 3.
Berikut adalah visualisasi periode lokal menggunakan definisi kedua, dengan titik koma ditambahkan di antara dua salinan w untuk kejelasan:
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
Perhatikan bahwa w tidak harus merupakan substring dari s . Ini terjadi di sini dalam kasus indeks-4.
Tugas
Masukan Anda adalah tak kosong serangkaian s karakter ASCII huruf kecil. Itu dapat diambil sebagai daftar karakter jika diinginkan. Output Anda akan menjadi daftar yang berisi periode lokal s pada setiap indeksnya. Dalam contoh di atas, output yang benar adalah [1,2,3,1,6,1,3,2] .
Hitungan byte terendah di setiap bahasa menang. Aturan standar kode-golf berlaku.
Uji kasus
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]
;
dalam contoh Anda). Itu akan menyingkirkan pemimpin 1.
qwertyuiop
, w akan menjadi versi yang diputarqwertyuiop
. Lihat juga contoh pada indeks 4: w belum tentu merupakan substring dari s .