Una parola portmanteau è una combinazione di due parole che prende parte di ogni parola e le trasforma in un'unica nuova parola. Ad esempio, lion + tiger => liger .
Scriviamo un programma per generare portmanteaus da una coppia di parole di input. I computer non sono i migliori in inglese, quindi dovremo stabilire alcune regole per garantire che i portmanteaus di output siano piacevoli alla vista e all'orecchio.
(Gli esempi qui sono mostrati con un separatore tra il prefisso e il suffisso per chiarezza:. li|ger
Tuttavia, gli output effettivi del programma non dovrebbero avere un separatore:. liger
)
- Ciascun portmanteau sarà costituito da un prefisso non vuoto della prima parola concatenato a un suffisso non vuoto della seconda parola: sì a
li|ger
, no a|iger
. - Se il prefisso termina con una vocale, il suffisso deve iniziare con una consonante e viceversa: sì a
lio|ger
ol|er
, no alio|iger
ol|ger
. Puoi decidere se contarey
come vocale o consonante. La soluzione deve scegliere un'opzione e attenersi ad essa, tuttavia. - La parola risultante non deve contenere per intero nessuna delle parole originali: sì a
lio|ger
, no alion|iger
oli|tiger
.- Questa regola vale anche se la parte in questione è formata da parti di entrambe le parole: con input di
two
+words
, l'outputtw|ords
è ancora illegale perché contiene la sottostringawords
. (L'unico output valido per questa coppia sarebbet|ords
.)
- Questa regola vale anche se la parte in questione è formata da parti di entrambe le parole: con input di
Il tuo programma o funzione deve prendere due parole e produrre / restituire un elenco di tutti i piacevoli portmanteaus che possono essere formati da quelle parole in quell'ordine.
Dettagli
- Si applicano i metodi standard di input e output . Sono vietate le scappatoie standard .
- Le parole saranno composte solo da lettere minuscole (o, se preferisci, solo da lettere maiuscole).
- Puoi prendere le due parole di input come un elenco, tupla, due input separati, una singola stringa con un delimitatore senza lettere, ecc.
- Il formato di output è altrettanto flessibile; se si restituisce o si genera una stringa, dovrebbe essere delimitato in modo tale che sia chiaro dove termina una parola portmanteau e inizia quella successiva.
- Non ci dovrebbero essere delimitatori all'interno di una parola portmanteau.
- Va bene se l'elenco di output include risultati duplicati; va anche bene rimuovere i duplicati.
Casi 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
Soluzione di riferimento
Ecco una soluzione di riferimento in Pip (tratta y
come consonante).
Questo è code-golf : vince la risposta più breve in ogni lingua!