Un mot -valise est une combinaison de deux mots qui fait partie de chaque mot et en fait un seul nouveau mot. Par exemple, lion + tigre => liger .
Écrivons un programme pour générer des portemanteaux à partir d'une paire de mots d'entrée. Les ordinateurs ne sont pas les meilleurs en anglais, nous devrons donc établir des règles pour garantir que les ports de sortie sont agréables à l'œil et à l'oreille.
(Des exemples sont présentés ici avec un séparateur entre le préfixe et le suffixe pour plus de clarté:. li|ger
Cependant, les sorties réelles du programme ne devraient pas avoir de séparateur:. liger
)
- Chaque valise consistera en un préfixe non vide du premier mot concaténé à un suffixe non vide du deuxième mot: oui à
li|ger
, non à|iger
. - Si le préfixe se termine par une voyelle, le suffixe doit commencer par une consonne, et vice versa: oui à
lio|ger
oul|er
, non àlio|iger
oul|ger
. Vous pouvez décider de comptery
comme une voyelle ou une consonne. Votre solution doit cependant choisir une option et la respecter. - Le mot résultant ne doit contenir ni l'un ni l'autre des mots d'origine: oui à
lio|ger
, non àlion|iger
ouli|tiger
.- Cette règle s'applique même si la partie en question est formée de parties des deux mots: avec une entrée de
two
+words
, la sortietw|ords
est toujours illégale car elle contient la sous-chaînewords
. (La seule sortie valide pour cette paire seraitt|ords
.)
- Cette règle s'applique même si la partie en question est formée de parties des deux mots: avec une entrée de
Votre programme ou fonction doit prendre deux mots et afficher / renvoyer une liste de tous les portmanteaus agréables qui peuvent être formés à partir de ces mots dans cet ordre.
Détails
- Les méthodes d'entrée et de sortie standard s'appliquent. Les failles standard sont interdites.
- Les mots ne seront composés que de lettres minuscules (ou, si vous préférez, uniquement de lettres majuscules).
- Vous pouvez prendre les deux mots d'entrée comme une liste, un tuple, deux entrées distinctes, une seule chaîne avec un délimiteur non-lettre, etc.
- Le format de sortie est tout aussi flexible; si vous retournez ou sortez une chaîne, elle doit être délimitée de telle sorte qu'il soit clair où se termine un mot de valise et où commence le suivant.
- Il ne devrait pas y avoir de délimiteurs à l'intérieur d'un mot-valise.
- Ce n'est pas grave si votre liste de sortie inclut des résultats en double; il est également possible de supprimer les doublons.
Cas de test
> lion, tiger
< liger, ler, liger, lir, lioger, lior
> tiger, lion
< tion, ton, tin, tigion, tigon, tigen
> spoon, fork
< sork, spork, spork, spok, spoork, spook
> smoke, fog
< sog, smog, smog, smokog
> gallop, triumph
< giumph, gumph, gariumph, gamph, gaph, gah, galiumph, galumph, galliumph, gallumph, galloriumph, gallomph, galloh
> breakfast, lunch
< bunch, brunch, brench, brech, breh, breanch, breach, breah, breakunch, breakfunch, breakfanch, breakfach, breakfah, breakfasunch
> two, words
< tords
> harry, ginny (if y is treated as a consonant)
< hinny, hanny, hany, hay, harinny, harrinny
> harry, ginny (if y is treated as a vowel)
> hinny, hy, hanny, hany, harinny, hary, harrinny
Solution de référence
Voici une solution de référence dans Pip (traite y
comme une consonne).
C'est le code-golf : la réponse la plus courte dans chaque langue gagne!
Réponses:
05AB1E , 28 octets
y
est une voyelle (même nombre d'octets que la consonne).Essayez-le en ligne! ou comme une suite de tests légèrement modifiée
la source
ʒs¢Z_
;ʒsåO_
;ʒsм__
; etc.Rétine , 72 octets
Essayez-le en ligne!
la source
Lw$`(?<=[aeiou])(.+),(.+)(?<!^\2\1,\2)(?!\1)(?=[^aeiou])|(?<=[^aeiou])(.+),(.+)(?<!^\4\3,\4)(?!\3)(?=[aeiou])
mais je ne pouvais pas me concentrer sur le golf à cause d'un mal de tête.(?=.(?<=[aeiou]\1[^aeiou]|[^aeiou]\1[aeiou]))
, puis j'ai probablement dû au moins six itérations pour la ramener là où elle est maintenant.^
s dans mon commentaire précédent sont erronés) En effet, je n'aurais jamais pensé à cette()|.()
astuce, je me serais probablement arrêté àLw$`(?<=([aeiou])|.)((.+),(.+))(?<!\4\2)(?!\3)(?=(?(1)[^aeiou]|[aeiou]))
.Pyth , 38 octets
L'entrée est une liste des deux mots et y n'est pas traité comme une consonne.
Essayez-le en ligne ici ou vérifiez tous les cas de test en même temps ici .
la source
Java 8,
228225215 octetsPrend deux chaînes dans la syntaxe de curry et renvoie une chaîne. Traite
y
comme une consonne. Essayez-le en ligne ici .Merci à DLosc pour avoir joué au golf 2 octets.
Ungolfed:
la source
Japt , 32 octets
Interprète Japt
10 octets enregistrés grâce à la compréhension plus claire de Shaggy de la syntaxe de Japt.
8 octets enregistrés grâce à une nouvelle fonctionnalité de langue
Enregistré 2 octets grâce à quelques suggestions de ETHproductions
La dernière version de Japt a introduit la fonction Produit cartésien, qui a économisé pas mal d'octets et m'a permis de restaurer l'ordre des entrées (donc "lion" "tigre" sorties "liger" et autres). "y" est toujours traité comme une consonne.
Explication:
la source
Python 3 ,
156150 octetsJ'ai considéré
y
comme une consonne.-6 octets grâce à Jonathan Frech
Essayez-le en ligne!
la source
lambda x=0
pour le faire descendre pour enregistrer ... 0 caractères, de façon ennuyeuse.lambda a,b,v='aeiou',r=range:{a[:i]+b[j:]for i in r(1,len(a))for j in r(1,len(b))if((a[i-1]in v)^(b[j]in v))*0**(a in a[:i]+b[j:]or b in a[:i]+b[j:])}
(Toujours 150)JavaScript (ES6), 124 octets
Prend les 2 mots dans la syntaxe de curry
(a)(b)
et imprime les résultats avecalert()
. Suppose que y est une consonne.Essayez-le en ligne!
la source
Gelée , 27 octets
Essayez-le en ligne!
Yy est une consonne. Les deux cas sont pris en charge. Renvoie les doublons.
La sortie a été améliorée sur TIO. Retirez
+/€
du pied de page pour voir la sortie réelle.la source
C ++ 11,
217202 octetsFait un usage intensif de
std::string#find
. Traitey
comme une consonne. Essayez-le en ligne ici .Ungolfed:
la source
Python 2 ,
179176166162 octetsEssayez-le en ligne!
3 octets de Jonathan Frech . Et 10 octets de thx à The Matt .
Dans mon monde, ce
y
n'est pas une voyelle. (C'est un hurlement!)la source
t) if
ett) or []
.(s in w)<1>(t in w)
.Rubis ,
113112109104octetsy
est une consonneCela génère les mêmes doublons que les exemples de la question, je dois utiliser la même boucle
Essayez-le en ligne!
la source
Emacs Lisp , 306 + 13 = 319 octets
+13 pour
(require'seq)
Essayez-le en ligne!
Définit une fonction lambda anonyme. Génère une séquence de portmanteaux séparés par des sauts de ligne, chacun étant entouré de guillemets. Les conseils de golf sont les bienvenus. La lettre
y
est considérée comme une consonne.Ungolfed
la source