Контаминация слово представляет собой сочетание двух слов , которые принимают участие каждого слова и делают их в единое новое слово. Например, лев + тигр => лигер .
Давайте напишем программу для генерации portmanteaus из пары входных слов. Компьютеры не являются лучшими в английском языке, поэтому нам нужно установить некоторые правила, чтобы гарантировать, что выходной портмантея приятен для глаз и ушей.
(Примеры здесь показаны с разделителем между префиксом и суффиксом для ясности:. li|ger
Однако фактические выходные данные программы не должны иметь разделитель:. liger
)
- Каждое портманто будет состоять из непустого префикса первого слова, соединенного с непустым суффиксом второго слова: да
li|ger
, нет, нет|iger
. - Если префикс оканчивается гласным, суффикс должен начинаться с согласного, и наоборот: да
lio|ger
илиl|er
, нетlio|iger
или илиl|ger
. Вы можете решить, считатьy
ли вас гласным или согласным. Ваше решение должно выбрать один вариант и придерживаться его, однако. - Полученное слово не должно содержать ни одно из исходных слов полностью: да
lio|ger
, нетlion|iger
или илиli|tiger
.- Это правило сохраняется, даже если рассматриваемая часть сформирована из частей обоих слов: при вводе
two
+words
выводtw|ords
по-прежнему недопустим, поскольку содержит подстрокуwords
. (Единственный действительный выход для этой пары будетt|ords
.)
- Это правило сохраняется, даже если рассматриваемая часть сформирована из частей обоих слов: при вводе
Ваша программа или функция должны взять два слова и вывести / вернуть список всех приятных портмантеев, которые могут быть сформированы из этих слов в указанном порядке.
Детали
- Применяются стандартные методы ввода и вывода . Стандартные лазейки запрещены.
- Слова будут состоять только из строчных букв (или, если хотите, только из заглавных букв).
- Вы можете взять два входных слова в виде списка, кортежа, двух отдельных входов, одной строки с разделителем без букв и т. Д.
- Формат вывода также гибкий; если вы возвращаете или выводите строку, она должна быть разделена так, чтобы было ясно, где заканчивается одно слово portmanteau и начинается следующее.
- Внутри слова портманто не должно быть разделителей.
- Ничего страшного, если ваш список вывода содержит повторяющиеся результаты; также можно удалить дубликаты.
Контрольные примеры
> 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
Эталонное решение
Вот эталонное решение в Пипе (рассматривается y
как согласная).
Это код-гольф : выигрывает самый короткий ответ на каждом языке!