Periodi locali
Prendi una stringa non vuota s . Il periodo locale di s all'indice i è il più piccolo intero positivo n tale che per ogni 0 ≤ k <n , abbiamo s [i + k] = s [i-n + k] ogni volta che vengono definiti entrambi i lati. In alternativa, è la lunghezza minima di una stringa non vuota w tale che se la concatenazione ww viene posizionata accanto a s in modo che la seconda copia di w inizi all'indice i di s , le due stringhe concordano ovunque si sovrappongano.
Ad esempio, calcoliamo il periodo locale di s = "abaabbab" nell'indice 2 (basato su 0).
- Prova n = 1 : quindi s [2 + 0] ≠ s [2-1 + 0] , quindi questa scelta non è corretta.
- Prova n = 2 : quindi s [2 + 0] = s [2-2 + 0] ma s [2 + 1] ≠ s [2-2 + 1] , quindi anche questo non è corretto.
- Prova n = 3 : quindi s [2 + 0-3] non è definito, s [2 + 1] = s [2-3 + 1] e s [2 + 2] = s [2-3 + 2] . Quindi il periodo locale è 3.
Ecco una visualizzazione dei periodi locali usando la seconda definizione, con punti e virgola aggiunti tra le due copie di w per chiarezza:
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
Nota che w non è necessariamente una sottostringa di s . Questo succede qui nel caso index-4.
L'obiettivo
Il vostro contributo è una stringa non vuota s di caratteri ASCII minuscoli. Se lo si desidera, può essere preso come un elenco di caratteri. L'output deve essere l'elenco contenente il periodo locale di s in ciascuno dei suoi indici. Nell'esempio sopra, l'output corretto sarebbe [1,2,3,1,6,1,3,2] .
Vince il conteggio dei byte più basso in ogni lingua. Si applicano le regole standard del code-golf .
Casi test
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]
;sia nel tuo esempio). Ciò eliminerebbe il primo 1.
qwertyuiop, w sarà una versione ruotata diqwertyuiop. Vedi anche l'esempio all'indice 4: w non è necessariamente una sottostringa di s .