Considérez les définitions suivantes tirées du nombre d'exécutions dans une chaîne de W. Rytter. Notez que mot, chaîne et sous-chaîne sont tous à peu près synonymes.
Une exécution dans une chaîne est un segment périodique non extensible (avec la même période minimale) dans une chaîne.
Une période p d'un mot w est tout entier positif p tel que w [i] = w [i + p] chaque fois que les deux côtés de cette équation sont définis. Soit per (w) la taille de la plus petite période de w. On dit qu'un mot w est périodique ssi (w) <= | w | / 2.
Par exemple, considérez la chaîne x = abcab
. per(abcab) = 3
comme x[1] = x[1+3] = a
, x[2]=x[2+3] = b
et il n'y a pas de période plus courte. La chaîne abcab
n'est donc pas périodique. Cependant, la chaîne abab
est périodique selon (abab) = 2.
Une course (ou périodicité maximale) dans une chaîne w est un intervalle [i ... j] avec j> = i, tel que
- w [i ... j] est un mot périodique avec la période p = per (w [i ... j])
- C'est maximal. Formellement, ni w [i-1] = w [i-1 + p] ni w [j + 1] = w [j + 1-p]. De manière informelle, l'exécution ne peut pas être contenue dans une exécution plus grande avec la même période.
Notons RUNS (w) l'ensemble des séries de w.
Exemples
Les quatre séries de atattatt
sont [4,5] = tt, [7,8] = tt, [1,4] = atat, [2,8] = tattatt.
La chaîne aabaabaaaacaacac
contient les 7 exécutions suivantes:
[1,2] = aa, [4,5] = aa, [7,10] = aaaa, [12,13] = aa, [13,16] = acac, [1,8] = aabaabaa, [9 , 15] = aacaaca.
Votre sortie doit être une liste d'exécutions. Chaque exécution doit spécifier l'intervalle qu'elle représente mais n'a pas besoin de sortir la sous-chaîne elle-même. La mise en forme exacte peut être celle qui vous convient.
Les exemples utilisent l'indexation 1, mais vous êtes libre d'utiliser à la place l'indexation 0 si cela est plus pratique.
TÂCHE
Écrivez le code qui, étant donné une chaîne w, sortez RUNS (w).
Langues et saisie
Vous pouvez utiliser n'importe quelle langue que vous aimez et prendre la chaîne d'entrée sous la forme qui vous convient le mieux. Vous devez cependant donner un programme complet et vous devez montrer un exemple de votre code s'exécutant sur l'exemple d'entrée.
class A{public static ...}
chaque fois que je voulaisRéponses:
Pyth, 38 octets
Suite de tests
la source
[i, j]
représente le début de la tranche entre (0 indexées) caractèresi-1
eti
et se terminant entre les caractèresj-1
etj
. C'est la convention standard en Pyth et dans la plupart des langages sains, comme il se doit (voir ici et ici ).CJam, 66
Essayez-le en ligne
Brève explication:
L'algorithme fonctionne en 4 étapes (les 3 premières d'entre elles correspondant aux 3 blocs principaux que vous pouvez observer):
Je voudrais jouer davantage au golf, donc tout est susceptible de changer.
la source