Étant donné une chaîne comme argument, affichez la longueur de la ou des sous-chaînes répétées les plus longues sans chevauchement ou zéro s'il n'y a pas une telle chaîne.
Vous pouvez supposer que la chaîne d'entrée n'est pas vide.
Exemples
abcdefabc
: la sous abc
- chaîne est répétée aux positions 1 et 7, donc le programme devrait sortir 3
abcabcabcabcab
: abcabc
ou bcabca
ou cabcab
sont répétés, donc le programme devrait afficher 6 . (la sous abcabcabcab
- chaîne est également répétée, mais les occurrences se chevauchent, nous ne l'acceptons donc pas).
aaaaaaa
: aaa
est répété aux positions 1 et 4 par exemple, donc le programme devrait sortir 3
abcda
: a
est répété, donc le programme devrait sortir 1
xyz
: pas de chaîne répétée → 0
ababcabcabcabcab
: devrait renvoyer 6
Il s'agit de code-golf , donc le moins d'octets gagne.
la source
Réponses:
brainfuck, 226 octets
Formaté:
Attend une entrée avec ou sans retour à la ligne et renvoie le résultat sous forme de valeur d'octet .
Essayez-le en ligne.
Cela vérifie chaque préfixe pour voir s'il apparaît plus tard dans la chaîne, puis coupe le premier caractère et répète le processus jusqu'à ce qu'il ne reste plus de caractères.
La bande est divisée en nœuds à 3 cellules,
c 0 f
où
c
est un caractère de la chaîne donnée, etf
est un indicateur qui peut être un, un négatif ou zéro. Des drapeaux non nuls sont placés entre les deux caractères en cours de comparaison, et les négatifs sont réservés aux cellules après la fin du préfixe actuel et avant le début du suffixe actuel (c'est-à-dire avant l'index de la correspondance potentielle actuelle).Le résultat est stocké à gauche de la chaîne et est mis à jour chaque fois qu'une correspondance est trouvée.
(La chaîne est en fait traitée en sens inverse avec une
\x01
annexe.)la source
Gelée , 12 octets
Essayez-le en ligne!
Comment ça marche
la source
œ-Q
est vraiment bien.Perl 6 , 36 octets
Essayez-le
Étendu:
la source
Rétine ,
353230 octetsDéfi assez cool.
Essayez-le en ligne
Explication:
la source
M%`.
comme deuxième étape.JavaScript (ES6),
796866 octetsEdit: enregistré
1113 octets grâce à @Arnauld.la source
Haskell , 79 octets
Essayez-le en ligne!
la source
%
peut accumuler une sous-séquence non contiguë, donnant des faux positifs comme 2 pouraa
inaxayaa
,a%d
est faux, mais aussi inutile. Ce qui signifie également que vous pouvez utiliser à lamax
place demaximum
.a%d
pour le""%d
corriger.a
est vide.sum[1|(x,y)<-zip a c,x==y]
peut être utilisé à la place dea!c
.Python 3 ,
7572 octetsEssayez-le en ligne!
la source
JavaScript, 120
la source
Husk , 11 octets
Essayez-le en ligne!
Remarque: Husk est plus récent que ce défi.
Explication
la source
Perl 5 avec
-p
, 40 octetsEssayez-le en ligne!
la source
Mathematica,
7565 octets10 octets enregistrés grâce à @JingHwan Min .
Fonction anonyme. Prend une chaîne en entrée et renvoie un nombre en sortie.
la source
BlankNullSequence (___)
quandOverlaps->All
est là.Max@StringLength@StringCases[#,a___~~___~~a___:>a,Overlaps->All]&
serait très bien.StringReplace
: PPyth - 16 octets
J'ai besoin de jouer au golf en convertissant toutes les cordes en longueurs et en trouvant le max.
Suite de tests .
la source
Clojure, 112 octets
boucle deux fois les nombres
0
jusqu'àn - 1
(n
étant la longueur de la chaîne), supprime lesj
caractères et divise le reste en parties "début" et "fin". Crée un ensemble de toutes les sous-chaînese
de longueurb
et l'utilise comme fonction pour vérifier s'ilb
est trouvé à partir de là. Renvoie la longueur deb
if found et 0 sinon, renvoie le maximum de ces valeurs.Serait intéressant de voir une version plus courte.
la source
Rétine , 24 octets
Essayez-le en ligne!
Un échauffement pour moi d'apprendre les nouvelles fonctionnalités de Retina 1.
Explication
Une étape de liste, cela renvoie toutes les correspondances pour l'expression régulière
(.*).*\1
, qui correspond à n'importe quel modèle de la forme "ABA", où A et B sont deux sous-chaînes arbitraires (éventuellement vides). Les options supplémentaires données à cette étape sontv
, qui prennent en compte les correspondances qui se chevauchent, et$
qui appliquent une substitution à chacune des correspondances avant de la renvoyer: la substitution est indiquée dans la deuxième ligne, et correspond à la longueur (.
) du premier groupe de capture ( qui serait la sous-chaîne "A" dans l'exemple précédent).Nous avons maintenant toutes les longueurs de sous-chaînes répétées, cette étape les trie simplement par ordre numérique, du plus court au plus long.
Enfin, cette étape grep (
G
) ne conserve que le dernier-1
résultat ( ), qui est la longueur de la sous-chaîne répétée la plus longue.la source
Javascript, 165 octets
Cas de test
la source
ababcabcabcabcab
, mais la chaînecabcab
est répétée.