Considere as seguintes definições extraídas de O número de execuções em uma sequência de caracteres por W. Rytter. Observe que palavra, string e substring são praticamente sinônimos.
Uma execução em uma sequência é um segmento periódico não extensível (com o mesmo período mínimo) em uma sequência.
Um período p de uma palavra w é qualquer número inteiro positivo p tal que w [i] = w [i + p] sempre que ambos os lados desta equação são definidos. Let per (w) indica o tamanho do menor período de w. Dizemos que uma palavra w é periódica se s por (w) <= | w | / 2.
Por exemplo, considere a sequência x = abcab
. per(abcab) = 3
como x[1] = x[1+3] = a
, x[2]=x[2+3] = b
e não há período menor. A sequência abcab
não é, portanto, periódica. No entanto, a sequência abab
é periódica conforme (abab) = 2.
Uma execução (ou periodicidade máxima) em uma string w é um intervalo [i ... j] com j> = i, de modo que
- w [i ... j] é uma palavra periódica com o período p = por (w [i ... j])
- É o máximo. Formalmente, nem w [i-1] = w [i-1 + p] nem w [j + 1] = w [j + 1-p]. Informalmente, a execução não pode estar contida em uma execução maior com o mesmo período.
Denote por RUNS (w) o conjunto de execuções de w.
Exemplos
As quatro execuções de atattatt
são [4,5] = tt, [7,8] = tt, [1,4] = atat, [2,8] = tattatt.
A sequência aabaabaaaacaacac
contém as 7 execuções a seguir:
[1,2] = aa, [4,5] = aa, [7,10] = aaaa, [12,13] = aa, [13,16] = acac, [1,8] = aabaabaa, [9 , 15] = aacaaca.
Sua saída deve ser uma lista de execuções. Cada execução deve especificar o intervalo que representa, mas não precisa gerar a própria substring. A formatação exata pode ser o que for mais conveniente para você.
Os exemplos usam a indexação 1, mas você pode usar a indexação 0, se for mais conveniente.
TAREFA
Escreva o código que forneceu uma sequência w, execute RUNS (w).
Idiomas e entrada
Você pode usar qualquer idioma que desejar e pegar a string de entrada da forma que for mais conveniente. No entanto, você deve fornecer um programa completo e mostrar um exemplo do seu código em execução na entrada de exemplo.
class A{public static ...}
todas as vezes que quisesse jogar códigoRespostas:
Pitão, 38 bytes
Suíte de teste
fonte
[i, j]
representa a fatia de partida entre caracteres (0-indexados)i-1
ei
e terminam entre caracteresj-1
ej
. Esta é a convenção padrão em Pyth e nos idiomas mais sãos, como deveria ser (veja aqui e aqui ).CJam, 66
Experimente online
Breve explicação:
O algoritmo funciona em 4 etapas (as 3 primeiras correspondendo aos 3 blocos principais que você pode observar):
Eu gostaria de jogar mais, então tudo isso está sujeito a alterações.
fonte