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!