Períodos locais
Pegue uma string não vazia s . O período local de s no índice i é o menor número inteiro positivo n, de modo que para cada 0 ≤ k <n , temos s [i + k] = s [i-n + k] sempre que ambos os lados são definidos. Como alternativa, é o comprimento mínimo de uma sequência não vazia w, de modo que, se a concatenação ww for colocada ao lado de s, de modo que a segunda cópia de w comece no índice i de s , as duas cadeias concordam onde quer que se sobreponham.
Como exemplo, vamos calcular o período local de s = "abaabbab" no índice 2 (baseado em 0).
- Tente n = 1 : então s [2 + 0] ≠ s [2-1 + 0] , portanto, essa opção não está correta.
- Tente n = 2 : então s [2 + 0] = s [2-2 + 0] mas s [2 + 1] ≠ s [2-2 + 1] , portanto, isso também não está correto.
- Tente n = 3 : em seguida, s [2 + 0-3] não é definida, s [2 + 1] = s [3/2 + 1] e do [2 + 2] = s [2-3 + 2] . Assim, o período local é 3.
Aqui está uma visualização dos períodos locais usando a segunda definição, com ponto-e-vírgula adicionado entre as duas cópias de w para maior clareza:
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
Observe que w não é necessariamente uma substring de s . Isso acontece aqui no caso do índice 4.
A tarefa
Sua entrada é uma sequência não vazia s de caracteres ASCII em minúsculas. Pode ser tomado como uma lista de caracteres, se desejado. Sua saída deve ser a lista que contém o período local de s em cada um de seus índices. No exemplo acima, a saída correta seria [1,2,3,1,6,1,3,2] .
A contagem de bytes mais baixa em cada idioma vence. Aplicam-se as regras padrão de código de golfe .
Casos de teste
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]
;
esteja no seu exemplo). Isso acabaria com o principal.
qwertyuiop
, w será uma versão rotacionada deqwertyuiop
. Veja também o exemplo no índice 4: w não é necessariamente uma substring de s .