Périodes locales
Prenez une chaîne non vide s . La période locale de s à l'indice i est le plus petit entier positif n tel que pour chaque 0 ≤ k <n , nous avons s [i + k] = s [i-n + k] chaque fois que les deux côtés sont définis. Alternativement, c'est la longueur minimale d'une chaîne non vide w telle que si la concaténation ww est placée à côté de s de sorte que la deuxième copie de w commence à l'index i de s , alors les deux chaînes s'accordent partout où elles se chevauchent.
À titre d'exemple, calculons la période locale de s = "abaabbab" à l'index 2 (basé sur 0).
- Essayez n = 1 : puis s [2 + 0] ≠ s [2-1 + 0] , donc ce choix n'est pas correct.
- Essayez n = 2 : alors s [2 + 0] = s [2-2 + 0] mais s [2 + 1] ≠ s [2-2 + 1] , ce n'est donc pas correct non plus.
- Essayez n = 3 : alors s [2 + 0-3] n'est pas défini, s [2 + 1] = s [2-3 + 1] et s [2 + 2] = s [2-3 + 2] . La période locale est donc de 3.
Voici une visualisation des périodes locales en utilisant la deuxième définition, avec des points-virgules ajoutés entre les deux copies de w pour plus de clarté:
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
Notez que w n'est pas nécessairement une sous-chaîne de s . Cela se produit ici dans le cas de l'index-4.
La tâche
Votre entrée est une chaîne non vide s de caractères ASCII minuscules. Il peut être considéré comme une liste de caractères si vous le souhaitez. Votre sortie doit être la liste contenant la période locale de s à chacun de ses indices. Dans l'exemple ci-dessus, la sortie correcte serait [1,2,3,1,6,1,3,2] .
Le nombre d'octets le plus bas dans chaque langue gagne. Les règles de code-golf standard s'appliquent.
Cas de 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]
;
trouve dans votre exemple). Cela permettrait de se débarrasser du premier 1.
qwertyuiop
, w sera une version pivotée deqwertyuiop
. Voir aussi l'exemple à l'index 4: w n'est pas nécessairement une sous-chaîne de s .