Pour les besoins de ce défi, une polyphthong est définie comme une tranche contiguë d'une chaîne, qui ne contient que des voyelles et a une longueur d'au moins 2. Étant donné une chaîne non vide en entrée, votre tâche consiste à sortir toutes les polyphthongs qu'elle contient. .
Par exemple, "abeoic"
a les tranches contiguës suivantes (séparées par des espaces):
a b e o i c ab be eo oi ic abe beo eoi oic abeo beoi eoic abeoi beoic abeoic
En supprimant ceux qui contiennent autre chose que des voyelles, ou qui ont une longueur inférieure à 2, nous obtenons nos polyphthonges souhaitées:
eo oi eoi
Vos soumissions doivent respecter les règles suivantes:
Vous pouvez choisir entre les minuscules ou les majuscules pour les E / S, mais le cas de sortie doit correspondre au cas d'entrée.
Les voyelles sont
aeiou
(pour les minuscules) etAEIOU
(pour les majuscules).y
/Y
n'est pas considéré comme une voyelle.L'entrée ne contiendra que de l'ASCII imprimable.
Si une polyphthong apparaît plusieurs fois, vous pouvez choisir de la sortir une seule fois ou de sortir toutes ses occurrences.
Tout format et méthode d' E / S raisonnables sont autorisés (les listes de caractères sont également très bien, à la fois pour l'entrée et la sortie).
Cas de test
Entrée -> Sortie (en minuscules) r67 ^^ () * 6536782! 87 -> [] programmation de puzzles et code golf -> [] aaand ... j'ai gagné! -> ['aa', 'aa', 'aaa'] abeoic -> ['eo', 'oi', 'eoi'] yah eioo ala -> ['ei', 'io', 'oo', 'eio', 'ioo', 'eioo'] @yabeeeayio__e -> ['ee', 'ee', 'ea', 'io', 'eee', 'eea', 'eeea'] 0ioen0aaiosnjksd -> ['io', 'oe', 'aa', 'ai', 'io', 'ioe', 'aai', 'aio', 'aaio']
Notez que pour les cas de test 3 et 6, vous pouvez sortir 'aa'
et 'ee'
respectivement une seule fois (voir la quatrième règle).
C'est le code-golf , la soumission la plus courte en octets dans toutes les langues gagne!
'aa'
apparaît deux fois. Doit-on émettre plusieurs fois la même chaîne si elle apparaît à différents endroits ou peut-on uniquement émettre des polyphtongs uniques?Réponses:
Python 2 ,
10297 octetsmerci à @JonathanFrech pour -5 octets
Essayez-le en ligne!
E / S en minuscules
la source
...AEIOU'
, car vous n'êtes autorisé à prendre que des lettres minuscules en entrée.print([w[a:b]for a in l for b in l[a+2:]if{*w[a:b]}<={*'aeiou'}])
fonctionne pour 93.JavaScript (ES6),
7775 octetsAttend l'entrée en minuscules. Produit des polyphthongs uniques sans répétition.
Cas de test
Afficher l'extrait de code
Comment?
Nous construisons récursivement l'arborescence de toutes les polyphthonges possibles, en élaguant les branches dès que le nœud actuel n'est plus contenu dans l'entrée et en enregistrant tous les nœuds correspondants d'au moins 2 caractères.
la source
Rétine ,
2320 octetsEssayez-le en ligne!
Ceci imprime toutes les occurrences d'une polyphthong.
Explication
La rétine a un moyen d'obtenir tous les matchs qui se chevauchent , mais ce que cela signifie vraiment, c'est qu'elle cherchera un match de chaque position. Donc, s'il y a plusieurs correspondances à partir de la même position, cela n'en retournera qu'une seule. La seule façon d'obtenir vraiment tous les matchs qui se chevauchent est d'utiliser cette fonctionnalité deux fois, une fois de gauche à droite et une fois de droite à gauche (afin que nous obtenions d'abord la correspondance la plus longue possible de chaque position de départ possible, puis nous obtenons également toutes les correspondances pour les positions finales possibles).
Donc, le programme réel:
Obtenez toutes les séries de voyelles qui se chevauchent. Ce que cela signifie vraiment, c'est d'obtenir tous les suffixes de toutes les voyelles.
Obtenez maintenant tous les préfixes qui sont au moins de longueur 2, en faisant correspondre de droite à gauche. Le
M
est implicite ici, car c'est la dernière ligne du programme.la source
!&`[aeiou]{2,}
est si proche de corriger , existe-t-il un moyen de le rendre plus gourmand afin qu'il corresponde àio
?&
pouvez faire est d'essayer une correspondance à partir de chaque position, vous ne pouvez donc pas avoir plusieurs correspondances de longueur différente à partir de la même position. C'est pourquoi j'ai besoin d'une deuxième étape.QuadS , 20 + 1 = 21 octets
avec le
o
drapeauEssayez-le en ligne!
Dans l'ordre des choses:
[aeiou]+
sur chaque match de ce PCRE,\⍵M
préfixes du match1↓
laissez tomber le premier (qui a une voyelle),/⍵
concaténer toutes les listes de préfixes⊃
divulguer (parce que les réductions/
incluent)Cela équivaut à la fonction tacite Dyalog APL:
Essayez-le en ligne!
la source
Mathematica, 92 octets
Essayez-le en ligne!
la source
Java (OpenJDK 8) ,
138135134 octetsEssayez-le en ligne!
la source
i<y-1
peut être implicitei<=y
etString#matches
vérifie l'intégralité de la chaîne, vous n'avez donc pas besoin de^
et$
. +1 pour m'avoir battu, cependant. Était sur le point de publier ma propre réponse de 138 octets (mais avec ces changements, j'ai proposé que la vôtre soit plus courte). :)J ,
3429 octetsEssayez-le en ligne!
la source
Gelée , 9 octets
Essayez-le en ligne!
Explication
-4 octets grâce à M. Xcoder
la source
L>1$$
parL’$
.L’$
avecḊ
pour 9 octets . Un équivalent seraitẆṫLḊḟÐḟØc
.C (gcc) , 104 octets (99 octets en minuscules uniquement ou en majuscules uniquement)
Oui, ça fuit - alors quoi?
Essayez-le en ligne!
la source
#include
, et vous n'avez besoin de gérer qu'une seule lettre, vous pouvez donc la raccourcir à 80 octets.R , 137 octets
déjoué par Mark !
Essayez-le en ligne!
la source
unique
.Perl 5, 53 +1 (-p)
Essayez-le en ligne
la source
PowerShell ,
9388 octetsEssayez-le en ligne!
Utilise des E / S en minuscules ou en majuscules (ou un mix!).
Emprunte le code de ma réponse sur Exploded Substrings pour obtenir toutes les sous-chaînes, puis retire celles
-match
contre lesquelles regex^[aeiou]{2,}$
- c'est-à-dire celles qui ont au moins deux voyelles de longueur et seulement des voyelles. Ces chaînes sont laissées sur le pipeline et la sortie est implicite.la source
Haskell ,
148137130 130123118 octetsMerci à @Laikoni pour -11 octets, encore -7 octets en me pointant vers des astuces de golf, encore -7 octets et encore -5 octets, pour un total énorme de -30 octets.
Cela semblait être un bon choix pour Haskell, mais le résultat ne semble pas être d'accord.Je suppose que Haskell était un choix OK après tout. Je suis toujours ennuyé par la façon dontsubsequences
fonctionne.Essayez-le en ligne!
la source
;
, mais augmentent la lisibilité du code. Vous utilisez toujourse
avecv
, vous pouvez donc déclarer directemente=(
elem"aeiou")
.y!!0
est plus court quehead y
. Il y aconcatMap
au lieu deconcat.map
, mais encore plus court est(=<<)
de la liste monade qui a le même effet.Data.Lists
au lieu deData.List
. Le premier a toutes les fonctions du second, mais aussi des choses supplémentaires commepowerslice
, ce qui donne une liste de toutes les sous-séquences continues.y@(h:_:_)
à déposerlength y>1
et raccourcirv(y!!0)
àv h
.(\x y->v x&&v y)
peut être raccourci en convertissant en point-free, soit manuellement en utilisant cette astuce ou en utilisant pointfree.io . (2) La monade de liste peut également être utilisée avec lado
notation, c'est-à-do x<-l;[...]
dire la même chose quel>>=(\x->[...])
. De plus, sur TIO, vous pouvez mettre votremain
dans le champ d'en-tête ou de pied de page pour que le nombre d'octets corresponde à la soumission réelle.Perl, 45 octets
la source
R ,
120 octets110 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
C, 119 octets
Essayez-le en ligne!
la source
JavaScript (ES6), 105 octets
Il reste probablement beaucoup de golf à faire.
la source
Perl 5 , 44 + 1 (
-n
) = 45 octetsEssayez-le en ligne!
la source
05AB1E , 10 octets
Essayez-le en ligne!
Explications:
la source
ŒʒžMм_}ʒg≠
ŒD1ùKʒžMм_
pour 10 octets. J'essaie de trouver un moyen deC,
10575 octetsUne fonction acceptant un pointeur vers une entrée minuscule et produisant des chaînes séparées par des espaces sur la sortie standard:
Programme de test
Démo
Explication
En utilisant GCC sur Debian Linux, il me semble que je m'en tire avec les déclarations implicites incompatibles de
strchr()
etprintf()
. D'autres plateformes peuvent nécessiter<stdio.h>
et<string.h>
être incluses.Essayez-le en ligne (nécessite Javascript).
la source
f(p)char*p;
pas l'êtref(char*p)
?f(s,d)char*s,*d
.APL (Dyalog) , 53 octets
Ceci est un
Dfn
( d IRECT f unctio n ). L'utilisation estp '<argument>'
. Juste avertissement: ce n'est pas très efficace etinput > 8 characters
expire sur TIO, mais fonctionne normalement quand on lui donne suffisamment de temps.Essayez-le en ligne!
Merci à @ Adám pour 16 octets!
Comment ça fonctionne:
Ceci est plus facile à comprendre si nous divisons le code en petites portions:
G←⊃,/{(,v∘.,⊢)⍣⍵⊢v←'aeiou'}¨⍳≢1↓⍵
: Cette partie de la fonction prend la longueur de l'argument (à droite) et mélange le vecteuraeiou
à lui-même autant de fois, produisant toutes les combinaisons possibles de[2, length(right arg)]
voyelles.(G∊⊃,/⌽,\∘⌽¨,\⌽⍵)/
: Cette partie vérifie quels éléments de G sont membres des sous-chaînes de l'entrée. Cela renvoie un vecteur booléen, avec1
's aux indices des combinaisons de voyelles présentes dans l'entrée et0
' s où elles ne le sont pas. Le vecteur résultant est ensuite mappé (/
)G
, retournant les éléments correspondant aux valeurs véridiques.Le tout est ensuite attribué à
p
.p←
n'est pas inclus dans le nombre d'octets car ce n'est pas nécessaire , cela facilite simplement l'utilisation de la fonction.la source
⊆
pour filtrer. Utilisez/
.Haskell , 74 octets
Essayez-le en ligne!
la source
Ruby 2.4, 100 octets
C'est ma première tentative de golf, et je suis sûr qu'il existe de nombreuses façons de raccourcir ce code.
la source
Ruby , 80 octets
Essayez-le en ligne!
la source
.compact
peut être-[nil]
Pyth , 15 octets
Essayez-le en ligne!
Certainement jouable au golf, je veux l'améliorer avant d'écrire une explication.
la source
T-SQL (SQL Server 2014), 281 octets
Entrée donnée par
Utilise une expression de table commune
s
pour séparer l'entrée en lettres individuelles ordonnées, puis une deuxième expression de table communec
pour générer toutes les combinaisons ordonnées, en jetant des non-voyelles.SQL Fiddle
la source
PHP, 139 octets
Démo en ligne
Comment ça fonctionne
Sélectionnez des sous-chaînes (commençant par la longueur de 2) constituées de caractères adjacents et déplacez-vous le long de la chaîne. Collectez toutes les sous-chaînes qui ne contiennent que des voyelles. Répétez avec des sous-chaînes plus longues.
Pour la chaîne 'abcdef', voici les sous-chaînes générées et vérifiées:
la source