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 має оцінку короткого замикання та потрійний оператор. Однак я не можу адекватно пояснити, як я використовував коротке замикання; важко міркувати.
Це моя перша відповідь. Я сподіваюся, що я зробив це правильно, і що є важливим для розміщення рішення, яке не може перемогти.
Редагування: дякуючі коментатори: трохи зменшити кількість байтів, двічі та видалити непотрібну інформацію. Спроба вдосконалити писемність. Сподіваємось, не помилився.