Контаминация слово представляет собой сочетание двух слов , которые принимают участие каждого слова и делают их в единое новое слово. Например, лев + тигр => лигер .
Давайте напишем программу для генерации 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
как согласная).
Это код-гольф : выигрывает самый короткий ответ на каждом языке!
Ответы:
05AB1E , 28 байт
y
является гласным (тем же количеством байтов, что и согласный).Попробуйте онлайн! или как слегка измененный набор тестов
источник
ʒs¢Z_
;ʒsåO_
;ʒsм__
; и т. д.Сетчатка , 72 байта
Попробуйте онлайн!
источник
Lw$`(?<=[aeiou])(.+),(.+)(?<!^\2\1,\2)(?!\1)(?=[^aeiou])|(?<=[^aeiou])(.+),(.+)(?<!^\4\3,\4)(?!\3)(?=[aeiou])
но я не мог сосредоточиться на игре в гольф из-за головной боли.(?=.(?<=[aeiou]\1[^aeiou]|[^aeiou]\1[aeiou]))
а затем, вероятно, потребовалось, по крайней мере, шесть итераций, чтобы привести его туда, где он сейчас находится.^
S в моем предыдущем комментарии ошибочны) Действительно, я бы никогда не подумал об этом()|.()
трюке, на котором я бы, наверное, остановилсяLw$`(?<=([aeiou])|.)((.+),(.+))(?<!\4\2)(?!\3)(?=(?(1)[^aeiou]|[aeiou]))
.Pyth , 38 байт
Ввод - это список двух слов, а у не рассматривается как согласный.
Попробуйте онлайн здесь или проверьте все тестовые примеры сразу здесь .
источник
Ява 8,
228225215 байтПринимает две строки в синтаксисе карри и возвращает строку. Угощения
y
как согласная. Попробуйте это онлайн здесь .Благодаря DLosc за игру в гольф 2 байта.
Ungolfed:
источник
Japt , 32 байта
Japt Переводчик
Сохранено 10 байт благодаря более ясному пониманию синтаксиса Джапта Шегги.
Сохранено 8 байт благодаря новой языковой функции
Сохранено 2 байта благодаря некоторым предложениям от ETHproductions
В новейшей версии Japt была введена функция декартовых произведений, которая сэкономила немало байтов и позволила мне восстановить порядок входов (поэтому «лев», «тигр», выход «лигер» и т. Д.). «у» до сих пор считается согласной.
Объяснение:
источник
Python 3 ,
156150 байтЯ считаю
y
согласной.-6 байт благодаря Джонатану Фреху
Попробуйте онлайн!
источник
lambda x=0
, чтобы сохранить ... 0 символов, досадно.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:])}
(Все еще 150)JavaScript (ES6), 124 байта
Принимает 2 слова в синтаксисе карри
(a)(b)
и печатает результаты сalert()
. Предполагается, что у согласная.Попробуйте онлайн!
источник
Желе , 27 байт
Попробуйте онлайн!
Уу согласная. Оба случая поддерживаются. Возвращает дубликаты.
Вывод был предварительно проверен на TIO. Удалить
+/€
из нижнего колонтитула, чтобы увидеть фактический результат.источник
C ++ 11,
217202 байтаДелает интенсивное использование
std::string#find
. Относитсяy
как согласная. Попробуйте это онлайн здесь .Ungolfed:
источник
Python 2 ,
179176166162 байтаПопробуйте онлайн!
3 байта от Джонатана Фреха . И 10 байтов, спасибо Мэтту .
В моем мире
y
нет гласного. (Это вопль!)источник
t) if
иt) or []
.(s in w)<1>(t in w)
.Рубин ,
113 112 109104 байтаy
согласнаяЭто выводит те же дубликаты, что и примеры в вопросе, я должен использовать тот же цикл
Попробуйте онлайн!
источник
Emacs Lisp , 306 + 13 = 319 байт
+13 за
(require'seq)
Попробуйте онлайн!
Определяет анонимную лямбда-функцию. Выводит последовательность разделенных символом новой строки portmanteaus, каждый из которых заключен в кавычки. Гольф советы приветствуются. Письмо
y
считается согласной.Ungolfed
источник