Uma palavra portmanteau é uma combinação de duas palavras que participam de cada palavra e as transformam em uma única palavra nova. Por exemplo, leão + tigre => liger .
Vamos escrever um programa para gerar portmanteaus a partir de um par de palavras de entrada. Os computadores não são os melhores em inglês; portanto, precisamos estabelecer algumas regras para garantir que os portmanteaus de saída sejam agradáveis aos olhos e aos ouvidos.
(Os exemplos aqui são mostrados com um separador entre o prefixo e o sufixo para maior clareza:. li|ger
No entanto, as saídas reais do programa não devem ter um separador:. liger
)
- Cada portmanteau consistirá em um prefixo não vazio da primeira palavra concatenado em um sufixo não vazio da segunda palavra: sim para
li|ger
, não para|iger
. - Se o prefixo terminar com uma vogal, o sufixo deverá começar com uma consoante e vice-versa: sim para
lio|ger
oul|er
, não paralio|iger
oul|ger
. Você pode decidir se contay
como vogal ou consoante. Sua solução deve escolher uma opção e permanecer com ela, no entanto. - A palavra resultante não deve conter nenhuma das palavras originais na íntegra: sim para
lio|ger
, não paralion|iger
ouli|tiger
.- Essa regra é válida mesmo que a parte em questão seja formada por partes de ambas as palavras: com a entrada de
two
+words
, a saídatw|ords
ainda é ilegal porque contém a substringwords
. (A única saída válida para esse par seriat|ords
.)
- Essa regra é válida mesmo que a parte em questão seja formada por partes de ambas as palavras: com a entrada de
Seu programa ou função deve ter duas palavras e gerar / retornar uma lista de todos os portmanteaus agradáveis que podem ser formados a partir dessas palavras nessa ordem.
Detalhes
- Aplicam-se métodos de entrada e saída padrão . As brechas padrão são proibidas.
- As palavras consistirão apenas em letras minúsculas (ou, se preferir, apenas em letras maiúsculas).
- Você pode usar as duas palavras de entrada como uma lista, tupla, duas entradas separadas, uma única sequência de caracteres com um delimitador sem letra, etc.
- O formato de saída é igualmente flexível; se você retornar ou gerar uma string, ela deverá ser delimitada de forma que fique claro onde uma palavra do portmanteau termina e a seguinte começa.
- Não deve haver delimitadores dentro de uma palavra portmanteau.
- Tudo bem se sua lista de saída incluir resultados duplicados; também é bom remover duplicatas.
Casos de teste
> 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
Solução de referência
Aqui está uma solução de referência no Pip (trata y
como uma consoante).
Este é o código-golfe : a resposta mais curta em cada idioma vence!