Inspiré par Est-ce une double parole? , J'ai imaginé un défi plus difficile. Étant donné une chaîne, déterminez si la chaîne est n-parler , pour tout .
N-parler est défini en répétant chaque lettre fois. Avec , la chaîneHello
est transformée enHHHHeeeelllllllloooo
. Votre objectif est de déterminer si l'entrée est une sortie valide pour toute transformation en n-parler.
Il convient de noter que toute phrase qui est n-parler valide, pour , est également k-parler valide. Ainsi, les parties difficiles à résoudre seront des valeurs impaires de .
Contribution
Une chaîne composée d'au moins 2 caractères. L'entrée peut également être une liste de caractères. L'entrée est sensible à la casse.
Sortie
Truthy
si la chaîne est n-parler, falsey
sinon.
Exemples
Vrais cas
HHeelllloo,, wwoorrlldd!!
TTTrrriiipppllleee ssspppeeeaaakkk
QQQQuuuuaaaaddddrrrruuuupppplllleeee ssssppppeeeeaaaakkkk
7777777-------ssssssspppppppeeeeeeeaaaaaaakkkkkkk
999999999
aaaabb
aaaaaaaabbbbcc
aaaaabbbbb
@@@
Si vous souhaitez générer des cas véridiques supplémentaires, vous pouvez utiliser ce script MathGolf . Placez la chaîne entre guillemets et la valeur de comme entrée.
Faux cas
Hello, world!
TTTrrriiipppllleee speak
aaaaaaaaaaaaaaaab
Ddoouubbllee ssppeeaakk
aabbab
aaaabbb
a (does not need to be handled)
(empty string, does not need to be handled)
Bien sûr, puisque c'est du golf de code, préparez-vous à couper quelques octets!
aabbab
aaaabbb
Réponses:
APL (Dyalog Unicode) , 12 octets
Fonctionne avec
⎕io←0
Essayez-le en ligne!
Golfé avec Adám .
Sur l'entrée (exemple:,
"aaccccaaaaaabb"
utiliser""
pour désigner une chaîne (un tableau de caractères) et''
pour désigner un caractère)∊0⍞0
entourer de 0 et aplatir,0 'a' 'a' 'c' 'c' 'c' 'c' 'a' 'a' 'a' 'a' 'a' 'a' 'b' 'b' 0
2≠/
effectuer par paire non égal,1 0 1 0 0 0 1 0 0 0 0 0 1 0 1
⍸
obtenir les indices indexés 0,0 2 6 12 14
∨/
calculer le GCD,2
1≠
n'est-ce pas égal à 1?la source
Java 10, 85 octets
Regex porté à partir de la réponse JavaScript de @Arnauld .
Essayez-le en ligne.
Explication:
Explication de l'expression régulière:
la source
Gelée , 5 octets
Essayez-le en ligne!
la source
JavaScript (ES6), 53 octets
Dérivé de l'expression régulière utilisée par @wastl dans Is it double speak? .
Essayez-le en ligne!
Version récursive, 55 octets
Essayez-le en ligne!
Commenté
la source
05AB1E , 5 octets
Essayez-le en ligne!
la source
Python 2 ,
73706967 octetsEssayez-le en ligne!
-4 octets, grâce à Jitse
la source
set(...)
par{...}
...1 in[...
Python 3 , 69 octets
Essayez-le en ligne!
la source
QuadS , 16 octets SBCS
Essayez-le en ligne!
1≠
est 1 différent de∨/
le GCD⍵
du résultat de(.)\1*
PCRE Recherche d'un caractère suivi de 0 ou plusieurs répétitions de celui-ci⊃⍵L
et renvoyer la première des longueurs de correspondance (c'est-à-dire la longueur de la correspondance)la source
Stax , 5 octets
Exécuter et déboguer
Procédure:
la source
Requête T-SQL 2008, 193 octets
Essayez-le en ligne
la source
PHP ,
7675 octetsEssayez-le en ligne!
Première tentative, une approche itérative quelque peu naïve.
Ungolfed:
-1 octet , merci à @ Night2!
la source
Perl 6 ,
302726 octetsEssayez-le en ligne!
Utilise également l'astuce GCD, mais utilise l'index de la position de fin de chaque exécution correspondant à l'expression régulière. Renvoie un nombre négatif (véridique) si n-parler, zéro (falsey) sinon.
la source
Haskell , 48 octets
Essayez-le en ligne!
Simple; utilise l'astuce GCD.
la source
Rouge , 80 octets
Essayez-le en ligne!
Rouge plus idiomatique :
Rouge , 81 octets
Essayez-le en ligne!
la source
Brachylog , 5 octets
Essayez-le en ligne!
Prend l'entrée via la variable d'entrée et sort par succès ou échec.
Au début, je pensais que ce serait en fait plus court que ma solution à Est-ce une double parole? , mais je me suis alors rendu compte que je pouvais
ġ
et essayerais une longueur de groupe de 1.la source
Japt
-¡
, 8 octetsL'essayer
la source
Kotlin , 78 octets
Essayez-le en ligne!
Explication
la source
Scala , 80 octets
Essayez-le en ligne!
PS La solution d'origine était basée sur la
split
fonction mais elle est plus longue (83 octets).la source
true
pour entréeaab
, malheureusement.s.
remplacé par(s+s).
pour gérer cela.aaaabb
etaabbbb
.Wolfram Language (Mathematica) , 34 octets
Essayez-le en ligne!
la source
Perl 5
-p
,83797674 octetsEssayez-le en ligne!
la source
Brain-Flak , 96 octets
Essayez-le en ligne!
Utilise la même astuce GCD que de nombreuses autres soumissions utilisent. La sortie est 0 si l'entrée n'est pas n-parler, et un entier positif sinon.
la source
Oracle SQL, 182 octets
Il fonctionne avec l'hypothèse que les données d'entrée sont stockées dans une table t (x), par exemple
la source
K (ngn / k) ,
2923 octetsEssayez-le en ligne!
edit: suppression de deux points inutiles (je sais quand un monadique est requis mais il n'est pas toujours clair pour moi s'il y a une ambiguïté, donc je sélectionne par défaut les deux-points) et changé le mod
x-y*x%y
en ngn / ky!x
, ce qui signifiait que je pouvais supprimer une affectation de variablela source
APL (Dyalog Unicode) ,
2422 octets SBCSFonction de préfixe tacite anonyme.
Essayez-le en ligne!
⊂
entourez la chaîne pour traiter la carte en utilisant la chaîne entière,par exemple
"aaabbb"
⍳∘≢{
…}¨
Pour chacun des⍳
ɩ ndices 1 à travers le décompte des caractères de la chaîne:ex.
3
⍺↑⍺
prendre le nombre actuel d'éléments du nombre actuel, remplir avec 0par exemple
[3,0,0]
(≢⍵)⍴
cycliquement r Eshape dans la forme du décompte des caractères dans la chaîne ,par exemple
[3,0,0,3,0,0]
⍵/⍨
utilisez-le pour répliquer les caractères de la chaîne"aaabbb"
1↓
déposez le premier ( n = 1)⊂∊
la chaîne entière est-elle membre de cette liste?la source
[1,0,0,1,0,0…]
etc. Je serai heureux de vous apprendre APL (cela ne prend pas longtemps à apprendre). Rendez-vous au APL Orchard .{1<∨/≢¨⍵⊆⍨≢∘∪¨,\⍵}
pour 18{1<∨/≢¨⍵⊆⍨≢¨∪\⍵}
?aacccaaaaabb
Retina 0.8.2 , 28 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Divisez le texte en séries de caractères identiques.
Remplacez-les tous par le même caractère.
Vérifiez si le GCD des longueurs des pistes est supérieur à 1.
la source
Japt
-mR
, 12 octetsL'essayer
la source
MathGolf , 14 octets
Essayez-le en ligne!
Explication
Vérifie toutes les divisions possibles de la chaîne d'entrée en morceaux de longueur égale et vérifie s'il existe une partition dans laquelle tous les morceaux ont un seul caractère unique.
la source
Pyth , 7 octets
Sorties 0 pour les entrées falsifiées ou un entier positif dans le cas contraire.
Essayez-le en ligne!
la source
Pyth , 8 octets
Essayez-le en ligne!
la source
Perl 5
-n
, 38 octetsEssayez-le en ligne!
le
print"\n"
pied de page est nécessaire pour séparer les sorties.Boucle simple à travers tous les
n
s possibles . N'affiche rien pour "1-parler", rien d'autre pour n-parler où n> 1.la source