introduction
Selon le post de Rand Al'Thor dans Puzzling SE, un mot à mailles serrées est un mot qui contient trois lettres alphabétiques consécutives (dans n'importe quel ordre).
Des mots comme l' éducation , la corne de brume et le cabaret sont tous considérés comme des mots à mailles serrées alors que des mots comme apprendre , klaxon et performer ne sont pas des mots à mailles serrées.
Défi
Le défi consiste à coder au golf un programme capable de prendre un seul mot en entrée (supposé en minuscules, à toutes fins utiles) et de renvoyer une sortie qui (si disponible) répertorie tous les jeux de lettres consécutifs (également en minuscules) si elle est un mot à mailles serrées, et une sortie vide s'il ne s'agit pas d'un mot à mailles serrées.
Exemples
Input: education
Output: cde
Input: foghorn
Output: fgh
Input: cabaret
Output: abc
Input: hijacking
Output: ghi, hij, ijk
Input: pneumonia
Output: mno, nop
Input: klaxon
Output: <<no output>>
Input: perform
Output: <<no output>>
Input: learning
Output: <<no output>>
Règles
- Alors que l'entrée doit être supposée être un seul mot en minuscule et la sortie doit être en minuscule, la nature de la sortie variera selon le choix de votre langue de codage. Veuillez sélectionner une forme de sortie qui conviendra le mieux à la nature du défi, que ce soit STDOUT, sortie de fichier, tableau, etc.
- Parce qu'il s'agit de code-golf, ce sera le cas du plus petit nombre d'octets qui sera clairement le gagnant.
- Pas de failles idiotes .
- Je n'accepterai pas les réponses qui ont les lettres consécutives dans un ordre non alphabétique ... Donc,
cab
je ne serai pas considéré comme une sortie appropriée pourcabaret
, par exemple. - Remarque spéciale, alors que les "triplets" ne doivent pas nécessairement être dans l'ordre alphabétique, mais les caractères à l'intérieur des triplets doivent être ... donc dans le cas du mot "performance", par exemple, la sortie
mno,nop
sera acceptée, comme il le feranop,mno
. Dans le cas du mot « détournement d' avion », il y a six façons que les triplets deghi
,hij
etijk
pourraient être organisées dans une liste, et les six permutations sont acceptables en sortie.
A part ça, à vos marques, prêt, golf!
!
Et avec un autre mot, car l'actuel donne le même résultat :-)pneumonia
peut l'être[('m','n','o'),('n','o','p')])
?Réponses:
05AB1E ,
765 octetsCode:
Explication:
Utilise l' encodage CP-1252 . Essayez-le en ligne!
la source
Python 3.5, 68 octets
Imprime les chaînes de sortie et se termine avec une erreur lorsque la valeur de caractère devient trop grande.
Génère toutes les chaînes de trois consécutives et imprime celles qui sont un sous-ensemble du mot d'entrée.
la source
Pyth -
111087 octetsMéthode de super force brute.
Suite de tests .
la source
Gelée , 7 octets
Ceci est un lien monadique. Essayez-le en ligne!
Comment ça marche
la source
JavaScript (ES6),
9590 octetsLes valeurs manquantes concaténent en tant que
undefined
, donc la chaîne résultante contient plus de 3 caractères. J'ai emprunté l'!c[3]
astuce à @ETHproductions pour économiser 5 octets.la source
undefined
c'est un mot trèsparseInt(c,36)
au lieu dec.charCodeAt()
?parseInt
du code golf.Python 3.5, 78 octets
la source
PHP, 100 octets
prend l'entrée comme argument de ligne de commande; imprime une virgule de fin. courir avec
-r
.la source
for($s=join(range(Z,z));$a=substr($s,++$i,3);)
est un moyen plus court de créer $ a. Il vérifie certes un tas de ponctuation et aussi certaines séries de 2 caractères, mais comme l'entrée est en lettres minuscules uniquement et il nécessite qu'il trouve 3 caractères, ce qui est bien.for($a="
ab ", $ i = 98; $ i <123;)! strstr (count_chars ($ argv [1], 3), $ a = substr ($ a, 1) .chr (++ $ i))?: imprimer "$ a,"; `économise 2 octets. Très belle façon, j'ai essayé d'autres méthodes en PHP mais je n'arrive pas à atteindre les octets de votre code. Je ne sais pas si vous avez besoin d'un espace après la virguleC,
175174 octetsdentelé:
Lors du tri, il remplace les valeurs en double par des 0, ces 0 sont triés au début du mot. La recherche des valeurs consécutives est alors triviale.
la source
MATL , 13 octets
Essayez-le en ligne!
la source
Haskell, 48 octets
Génère tous les triplets de trois caractères consécutifs, prend ceux qui n'utilisent que des lettres en entrée.
53 octets:
La liste
['c'..]
contient tous les caractères Unicode à'c'
partir de maintenant. La compréhension de la liste les[[pred$pred c..c]|c<-['c'..]]
transforme en toutes les chaînes de 3 caractères consécutifs à"abc"
partir de maintenant. Nous reculons avec[pred$pred c..c]
au lieu d'avancer avec[c..succ$succ c]
pour éviter une erreur lors de la prise du successeur du caractère unicode le plus élevé.Ces triplets sont filtrés pour ceux qui n'utilisent que des lettres dans l'entrée.
la source
Perl, 36 octets
Comprend +1 pour
-n
Donnez votre avis sur STDIN:
Juste le code:
la source
T-SQL, 153 octets
J'ai dû réagir au commentaire de WallyWest, à savoir que cela faisait longtemps depuis la dernière réponse TSQL. La réponse a été en partie inspirée par la réponse de Brian J
Golfé:
Violon
Non golfé:
la source
Haskell,
636052 octetsExemple d'utilisation:
f "hijacking"
->["ghi","hij","ijk"]
.scanr(:)"_"['a'..]
construit une liste avec la queue de la liste de tous les caractères unicode commençant par'a'
et la laisse se terminer par a'_'
, c'est-à-dire["abcde...\1114111_", "bcde...\1114111_", "cde...\1114111_", ..., "\1114109\1114110\1114111_", "\1114110\1114111_", "\1114111_", "_"]
. Ensuite, nous prenons jusqu'à trois caractères de chaque chaîne et la lions àx
. Gardez toutx
où se trouve chaque lettre dans le paramètre d'entréew
.Modifier: @xnor a enregistré
37 octets. Merci!la source
a:b:c:_
avec un @-motif?'z'
limite supérieure et laisser simplement essayer tous les caractères.take
et de supprimer la chaîne vide:f w=[x|x<-init$take 3<$>scanr(:)""['a'..],all(`elem`w)x]
scanr
"." au lieu de""
et omettre leinit$
.T-SQL (SQL Server 2014), 217 octets
Golfé
Usage
Déclarez d'abord la variable @a comme un caractère quelconque et affectez l'entrée comme ceci
Je n'ai pas compté la déclaration comme faisant partie de mon code, mais je n'ai pas trouvé de standard sql pour la saisie, donc je suis prêt à changer mon comptage
La sortie sera soit une ligne pour chaque triple, soit aucune ligne si le mot n'est pas serré
Non golfé
la source
R, 220 octets
Ma solution est assez simple. Il parcourt les combinaisons de trois lettres possibles, parcourt et vérifie les caractères de la chaîne entrée par rapport aux trois lettres consécutives et les ajoute à une chaîne. La chaîne n'est alors imprimée que lorsque trois lettres sont trouvées (c == 4).
entrée sortie
la source
Python 3.5,
114111888079 octets:Une fonction lambda anonyme. Prend l'entrée en tant que chaîne majuscule et génère un tableau de tuples, ceux remplis de trois caractères majuscules représentant tous les ensembles de
3
lettres consécutives qui apparaissent dans l'entrée. Par exemple,serait la sortie pour l'entrée
HIJACKING
. Ce format de sortie a été confirmé par OP. A donc le seul format d'entrée en majuscules. Cependant, si vous souhaitez entrer uniquement en minuscules, remplacez simplementrange(65,91)
parrange(97,123)
en ajoutant un octet de plus.Repl.it avec tous les cas de test!
Explication:
Fondamentalement, ce qui se passe ici est:
Une liste,,
W
est créée à l'aide deW=[*map(chr,range(65,91))]
, qui contient toutes les lettres majuscules de l'alphabet anglais. Pour cette raison, une entrée en majuscule est toujours requise.Pour chaque tuple,
i
dans une liste, que nous appelleronsU
, contenant les trois tuples de lettres consécutifs, c'est-à-dire:créé par
zip(W,W[1:],W[2:])
, chacuni
est entièrement ajouté à la liste de sortie tant que tous les éléments de la version définie dei
({*i}
) sont dans la version définie de inputX
({*X}
), c'est{*X}>={*i}
-à-dire queX
c'est un sur - ensemble dei
. Sinon, la version vide dei
(()
) est ajoutée à la liste.Une fois que tous les tuples ont été traités avec les correspondances entièrement ajoutées, la liste est renvoyée en tant que sortie finale.
la source
Scala, 59 octets
Non golfé:
Explication:
la source
En fait, 13 octets
Suggestions de golf bienvenues. Essayez-le en ligne!
Ungolfing
la source
Java 7, 230 octets
Cela peut très probablement être joué au golf, mais le défi était beaucoup plus difficile que je ne le pensais à l'origine à Java ..
Cas non testés et testés:
Essayez-le ici.
Sortie:
la source
PowerShell v2 +, 93 octets
Je me sens beaucoup plus longtemps que nécessaire, mais je n'arrive pas à jouer au golf plus loin.
Prend des informations
$n
. Les boucles de97
la120
, la construction des chaînes contiguës de trois lettres - qui est, jusqu'à la|?
, nous auronsabc
,bcd
,cde
, etc. sur le pipeline. Ensuite, cela passe par unWhere-Object
(le|?
) pour ne retirer que les éléments où la clause est vraie. Ici, la clause est 1) la chaîne d'entrée$n
,char
convertie en un tableau,sort
ed etselect -u
nique'd, puis éditée de-join
nouveau dans une chaîne, 2)-match
éditée contre les chaînes de trois lettres (c.-à-d. Correspondance regex). Si c'est une correspondance, alors la chaîne de trois lettres est dans le mot, et donc elle filtre à travers le|?
. Les résultats sont laissés sur le pipeline et la sortie est implicite.Exemples
(Notez qu'ici, la sortie est séparée par des espaces, car nous stringifions la sortie par concaténation.)
la source
Rétine,
10656 octetsDédupliquer, trier. Ajouter
abc
. Trouvez si la sous-chaîne est trouvée et ajoutez-la si oui. Traduire à la sous-chaîne suivante. Répéter. Supprimez ensuite les deux premières lignes.Essayez-le en ligne
Solution naïve:
Dédupliquer, trier, puis produire des correspondances superposées de 3 lettres séquentielles
Essayez-le en ligne
la source
JavaScript (Firefox 48), 93 octets
Cela se prête à une version ES6 de 96 octets :
Comment ça marche
Le premier bloc majeur de la fonction est le suivant:
new Set(string)
crée un objet Set qui contient un de chaque caractère unique dans la chaîne. Par exemple,new Set("foghorn")
reviendraSet ["f", "o", "g", "h", "r", "n"]
. Nous pouvons convertir cela en un tableau avec[... ]
, puis le trier avec le intégré.sort()
. Cela se transforme"foghorn"
en["f", "g", "h", "n", "o", "r"]
.La prochaine étape est la suivante:
Cela met en correspondance chaque personnage
c
dua
groupe avec le personnage concaténé avec les deux éléments suivants. Par exemple["f", "g", "h", "n", "o", "r"] => ["fgh", "ghn", "hno", "nor", "orundefined", "rundefinedundefined"]
,. (Leundefined
s s'affichent lorsque vous essayez d'accéder à un membre inexistant du tableau.La dernière étape consiste à filtrer:
Tout d'abord, le
!c[3]&
est d'exclure toutes les chaînes qui contiennentundefined
. Ceci est nécessaire car un bogue fait que l'algorithme suivant compte par exemplegmundefined
comme un triplet consécutif.Toutes les chaînes de trois caractères consécutifs, lorsqu'elles sont interprétées comme des nombres en base 36, sont 38 modulo 1333. Je l'ai compris par le calcul suivant:
Par conséquent, si une chaîne de trois caractères est 38 mod 1333 en base-36, les trois caractères sont consécutifs dans l'alphabet.
Extrait de test
Afficher l'extrait de code
la source
gem
etmage
.!c[3]
astuce qui a réduit ma réponse ES6 à la longueur de votre réponse ES6 précédente, alors maintenant je surpasse même votre réponse Firefox 30+. Désolé pour ça.Raquette 237 octets
Essai:
Sortie:
Version détaillée:
la source
Rubis , 50 octets
each_cons(3)
obtient toutes les sous-listes consécutives de longueur 3 de l'alphabet?a..?z
, puis utiliseze&s.chars==e
pour sélectionner uniquement celles qui ont tous les caractères dans la chaîne cible en utilisant l'intersection setwise. Renvoie une liste de listes.Essayez-le en ligne!
la source
[R], 110 octets
Je suis sûr que c'est toujours jouable au golf
la source
Japt ,
109 octetsEssayez-le ou exécutez tous les cas de test
la source