Ceci est tiré de cette question (avec la permission du cours). Je citerai:
Créez une fonction qui prend une chaîne, et elle doit retourner true ou false selon que l'entrée se compose uniquement d' une séquence de caractères répétée. La longueur de la chaîne donnée est toujours supérieure à 1 et la séquence de caractères doit avoir au moins une répétition.
Quelques exemples:
'aa' //true
'aaa' //true
'abcabcabc' //true
'aba' //false
'ababa' //false
'weqweqweqweqweqw' // false
Plus précisément, la vérification d'une chaîne strictement composée de sous-chaînes répétitives ( mise à jour ) peut générer n'importe quelle représentation vraie ou fausse, mais aucune sortie d'erreur s'il vous plaît. Chaînes strictement alphhanumériques. Sinon, les règles de golf de code standard. C'est Code Golf, donc la réponse la plus courte en octets pour chaque langue l'emporte.
la source
Réponses:
Brachylog ,
43 octetsEssayez-le en ligne!
Explication
Le programme imprime
true.
si les contraintes peuvent être satisfaites etfalse.
sinon.la source
~j↙
ou à=Ṁc
travailler avant de remarquer que vous avez posté cela il y a une heureġ=Ṁ
Ṁ
est une variable contrainte d'être une liste de deux éléments ou plus)JavaScript (ES6), 22 octets
Renvoie une valeur booléenne.
Essayez-le en ligne!
Sans expression régulière,
3329 octetsRenvoie soit
null
(fausse), soit un objet (vrai).Essayez-le en ligne!
NB: Techniquement,s est converti en une expression régulière pour match () , donc le titre ci-dessus est un mensonge.
la source
grep, 19
Tester
Sortie:
la source
Japt , 6 octets
Un octet enregistré grâce à @Shaggy
Essayez-le en ligne!
la source
p<space>
avec²
d'enregistrer un octet.Java,
2524 octets-1 octet merci à Olivier Grégoire!
Réponse de regex ennuyeux
Essayez-le en ligne!
C'est juste 1 octet de plus que la réponse python aaaaaje suis lié maintenant :)la source
$
car lamatches
méthode est une correspondance exacte, pas une correspondance de sous-chaîne par défaut.matches
ajouter sa propre$
expression rationnelle. Merci!Excel, 26 octets
Entrées de A1, sorties vers la cellule dans laquelle vous mettez cette formule.
la source
A
) et le définissez comme entrée.A1
aussi une "variable" car il contient la valeur d'entrée? :)R , 28 octets
Essayez-le en ligne!
Version simple Regex. R est (parfois) très similaire à Python, donc c'est similaire à la réponse regex Python 2 de TFeld, bien que plus courte!
Question (si quelqu'un connaît la réponse)
Je ne comprends toujours pas pourquoi cela fonctionne, car la sous-chaîne peut être de n'importe quelle longueur et fonctionnera toujours, et fonctionne toujours lorsque j'ajoute une lettre au début d'une chaîne valide, comme "cABABABABAB". Si je lis personnellement l'expression régulière, je vois
(.+)
, qui capture n'importe quel groupe de n'importe quelle longueur. Et puis\\1+$
qui répète le groupe capturé un certain nombre de fois jusqu'à la fin.Alors pourquoi ne capture-t-il pas simplement "AB" et ne trouve-t-il pas qu'il est répété jusqu'à la fin de la chaîne, d'autant plus qu'aucune restriction n'est spécifiée quant à l'endroit où la sous-chaîne peut commencer?
la source
perl=TRUE
fait correspondre à cABABAB, comme vous vous en doutez. L'exécutiongrep -E '(.*)\1+$'
en bash correspond également à cABABAB, même si ellegrep -E
utilise ERE, la même saveur regex que R est censée prendre en charge..+
au début d'un modèle^.+
est une optimisation importante, mais si l'.+
intérieur est en train de capturer des parenthèses, il cesse d'être valide.Retina 0.8.2 , 9 octets
Essayez-le en ligne! Le lien inclut des cas de test.
la source
Gelée ,
54 octetsJe vois maintenant que la meilleure façon est de suivre la méthode de xnor !
Un lien monadique qui accepte une liste de caractères et génère un entier - la longueur la plus courte possible d'une tranche répétée ou zéro s'il n'en existe pas. Notez que zéro est falsey tandis que les nombres non nuls sont vrais dans Jelly.
Essayez-le en ligne!
Comment?
la source
Perl 5
-p
, 14 octetsEssayez-le en ligne!
la source
Python 2 , 24 octets
Essayez-le en ligne!
Sans vergogne volé de la réponse de xnor à la question d'origine.
Version plus intuitive:
Python 2 ,
595553 octetsEssayez-le en ligne!
Version regex ennuyeuse:
Python 2 , 44 octets
Essayez-le en ligne!
la source
Wolfram Language (Mathematica) ,
2423 octetsEssayez-le en ligne!
la source
Pyke , 4 octets
Essayez-le ici!
la source
J ,
26 25 1514 octetsUtilisation de la méthode xnor
Essayez-le en ligne!
original (deux approches différentes)
J , 25 octets
Essayez-le en ligne!
J , 26 octets
Essayez-le en ligne!
la source
PowerShell,
2324 octets+1 octet pour correspondre pleinement aux règles
Essayez-le en ligne!
Plutôt ennuyeux. Basé sur les autres réponses Regex. Heureusement, PowerShell n'utilise pas
\
de personnage d'échappement!la source
true
pouraabcabc
C # (Visual C # Interactive Compiler) , 70 octets
Adaptation sans vergogne de xnor ( 46 octets )
Ma solution non Regex:
Explication:
Remplacez chaque sous-chaîne possible commençant à l'index 0 par une chaîne vide. Si le résultat est une chaîne vide, la chaîne est entièrement constituée de cette sous-chaîne. Étant donné que cela inclut l'évaluation de la chaîne entière avec elle-même, la quantité de résultats attendus doit être supérieure à 1.
Exemple: abcabc
Sous-chaînes possibles commençant à l'index 0:
Si nous les remplaçons par des chaînes vides
Puisqu'il existe une sous-chaîne autre que «abcabc» qui renvoie une chaîne vide, la chaîne est entièrement constituée d'une autre sous-chaîne («abc»)
Essayez-le en ligne!
la source
Python 3 ,
62605654 octets-4 octets merci à ArBo
Essayez-le en ligne!
la source
f=
peut être supprimé; les fonctions anonymes sont généralement autorisées. De plus, en passant à Python 2 et en vérifiant l'appartenance à une liste au lieu de laany
construction, vous pouvez atteindre 55 octetsJapt , 10 octets
Renvoie un nombre positif si véridique et 0 si falsey. Si vous voulez une sortie booléenne, ajoutez simplement un
-¡
drapeauEssayez-le en ligne!
la source
Husk , 6 octets
Essayez-le en ligne!
J'ai l'impression que c'est un octet de plus qu'optimal, mais je n'ai pas trouvé d'arrangement qui rendait la composition explicite
ȯ
inutile.Explication
la source
€htD¹
évite leȯ
.λ€htD¹
mais je ne savais pas que les lambdas seraient ajoutés implicitementMathematica 11.x, 74 octets
où, tout au long,
#
représente la chaîne d'entrée, ettrouve les sous-chaînes de la chaîne d'entrée correspondant au modèle
Ce modèle nécessite des correspondances,
x
doit commencer au début de la chaîne et doit satisfaire à la condition que (1) la correspondance ne soit pas la chaîne d'entrée entière et (2) si nous remplaçons les occurrences de la correspondance dans la chaîne d'entrée par la chaîne vide on obtient la chaîne vide. Enfin, en comparant la liste des correspondances à la liste vide,est
True
si la liste des correspondances n'est pas vide etFalse
si la liste des correspondances est vide.Cas de test:
et
la source
Python 3, 84 octets
Utilise
textwrap.wrap
(grâce à cette réponse ) pour diviser la chaîne en morceaux de longueurn
pour tester chaque longueur possible de sous-chaîne répétée. Les morceaux séparés sont ensuite comparés les uns aux autres en les ajoutant à un ensemble. Si toutes les pièces sont égales et que l'ensemble est de longueur 1, alors la chaîne doit être une chaîne répétitive. J'ai utilisé à la<2
place de==1
car il enregistre un octet et la longueur de la chaîne d'entrée était garantie supérieure à zéro.S'il n'y a pas
n
de sous-chaînes répétitives de longueur quin
composent la chaîne entière, retournez false pour la fonction entière.la source
05AB1E , 5 octets
La méthode de xnor de la question précédente semble également être optimale dans 05AB1E.
Essayez-le en ligne! ou comme suite de tests
Explication
la source
Nettoyer , 73 octets
N'utilise pas l'expression régulière.
Essayez-le en ligne!
Définit
$ :: [Char] -> Bool
.Vérifie si la chaîne donnée est un préfixe de la répétition d'une sous-chaîne prise à la fin.
la source
C ++ (gcc) , 36 octets
Essayez-le en ligne!
Un autre port de la solution de xnor. Utilise une macro pour développer l'argument dans l'expression. L'argument est supposé être de type
std::string
.la source
Variable QlikView, 27 octets
Elle doit être définie comme une variable, qui vous permet ensuite de transmettre des paramètres, par exemple
$1
comme valeur d'entrée.Il renvoie
0
ou-1
(équivalent à laTRUE()
fonction de QlikView ).la source
Swift, 196 octets
Essayez-le en ligne!
la source
Icône , 46 octets
Essayez-le en ligne!
Un autre port de la solution de xnor.
la source
K (oK) , 29 octets
Essayez-le en ligne!
la source
Rouge , 72 octets
Essayez-le en ligne!
Retours
1
pourTrue
la source
T-SQL, 47 octets
En utilisant la méthode @ Xnor :
Garder l'ancienne réponse car elle contient du bon golf (67 octets):
Explication: Ce script tente à plusieurs reprises de remplacer l'entrée '@y' par les premiers caractères '@' de l'entrée '@y' par rien, tout en augmentant '@'.
Finalement, le résultat sera vide. Si cela se produit lorsque la variable de boucle est égale à la longueur du varchar, le critère est faux / 0 car '@' = len (@y) (il n'y avait pas de varchar répétitif).
peut être joué dans ce
car la longueur de '@y' ne peut pas être 0 et '@' ne dépassera jamais la longueur @y.
Essayez-le en ligne
la source