Períodos locales
Tome una cadena no vacía s . El período local de s en el índice i es el número entero positivo más pequeño n tal que para cada 0 ≤ k <n , tenemos s [i + k] = s [i-n + k] cada vez que se definen ambos lados. Alternativamente, es la longitud mínima de una cadena no vacía w tal que si la concatenación ww se coloca al lado de s para que la segunda copia de w comience en el índice i de s , entonces las dos cadenas coinciden donde se superponen.
Como ejemplo, calculemos el período local de s = "abaabbab" en el índice 2 (basado en 0).
- Pruebe n = 1 : luego s [2 + 0] ≠ s [2-1 + 0] , por lo que esta opción no es correcta.
- Pruebe n = 2 : entonces s [2 + 0] = s [2-2 + 0] pero s [2 + 1] ≠ s [2-2 + 1] , por lo que esto tampoco es correcto.
- Pruebe n = 3 : entonces s [2 + 0-3] no está definido, s [2 + 1] = s [2-3 + 1] y s [2 + 2] = s [2-3 + 2] . Por lo tanto, el período local es 3.
Aquí hay una visualización de los períodos locales usando la segunda definición, con punto y coma agregados entre las dos copias de w para mayor claridad:
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
Tenga en cuenta que w no es necesariamente una subcadena de s . Esto sucede aquí en el caso del índice 4.
La tarea
Su entrada es una cadena no vacía s de caracteres ASCII en minúscula. Se puede tomar como una lista de caracteres si se desea. Su salida será la lista que contiene el período local de s en cada uno de sus índices. En el ejemplo anterior, la salida correcta sería [1,2,3,1,6,1,3,2] .
El conteo de bytes más bajo en cada idioma gana. Se aplican reglas estándar de código de golf .
Casos de prueba
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]
;esté en su ejemplo). Eso eliminaría al líder 1.
qwertyuiop, w será una versión rotada deqwertyuiop. Vea también el ejemplo en el índice 4: w no es necesariamente una subcadena de s .