Python 3, 108 101 99 байт
(Не использовать регулярные выражения)
Эта функция ожидает ввода через 2 аргумента, например f('blushing','crow')
. Возвращает новые слова в кортеже.
S=lambda s,p="":s[0]in"aeiou"and(p,s)or S(s[1:],p+s[0])
def f(x,y):a,b=S(x);c,d=S(y);return c+b,a+d
Существует множество решений для регулярных выражений, поэтому я хотел написать что-то, что не использовало бы библиотеку Python.
Как это устроено
Единственной сложной частью является лямбда-выражение S
(аббревиатура означает « S plit перед первым гласным»). Он рекурсивно «перебирает» данное слово, перемещая по одному символу за раз от начала s
(который начинается со всего слова) до конца p
(который начинается пустым). При первой обнаруженной гласной она возвращает (p,s)
, т.е. (префикс, суффикс). Обратите внимание, что это неправильный порядок по сравнению с параметрами!
Я подумал, что для возвращаемого ордера имеет больше смысла префикс, а не суффикс (потому что обычно префикс идет перед суффиксом). Этот порядок может a,b=S(x)
немного облегчить чтение кода.
Но у меня не было выбора порядка в параметрах лямбды, поэтому я не мог определить p
раньше s
. Первый параметр s
, должен был взять слово целиком , потому что p
имел значение по умолчанию и параметры по умолчанию идут в последнюю очередь . Для этого мне не нужно было S
дважды вызывать функцию с пустой строкой, и можно было бы сохранить несколько байтов. Однако, возможно, это было просто плохое решение вернуть префикс / суффикс в обратном порядке, поскольку он использовался в лямбда-выражении.
Что касается выбора лямбда-выражения над функцией, то требуется больше байтов, чтобы сказать, def S(s,p=""):return
чем S=lambda s,p="":
. Я могу сделать этот выбор, потому что Python имеет оценку короткого замыкания и троичный оператор. Однако я не могу адекватно объяснить, как я использовал короткие замыкания; это трудно рассуждать.
Это мой первый ответ. Я надеюсь, что я сделал это правильно, и что стоит опубликовать решение, которое не может победить.
Редактирование: Спасибо, комментаторы: Немного, вдвое уменьшил количество байтов и удалил ненужную информацию. Попытка улучшить написание. Надеюсь, не ошибся.