Заїкання - це проблема, яку багато хто з нас, можливо, відчували або принаймні бачили. Хоча більшість відомих програмного забезпечення для розпізнавання мови мають серйозні проблеми із заїканням мови, давайте уявимо програмне забезпечення, яке розуміє заїкання, але не може їх виправити, а записує їх лише як є.
Приклад написаного текстом такого програмного забезпечення може бути таким: "будьте обережні" . У цьому прикладі "обережно" є початкове слово, а "ca ca" - заїкані слова.
Виклик
Напишіть програму або функцію, яка фіксує заїкані слова, видаляючи їх із введення, зберігаючи вихідні слова. Наприклад, виправлена версія "будь ласка, будьте обережні", це "будь ласка, будьте обережні" .
Це кодовий гольф , найкоротша відповідь на всіх мовах виграє!
Що таке заїкані слова?
Заїкання має багато різних варіацій. Але для простоти цього завдання ми обмежимось такими правилами:
- Заїкані слова можуть бути незавершеною частиною або цілим початковим словом. Під "незавершеною частиною" я маю на увазі, що початкове слово має починатися саме з заїканого слова. Наприклад, "ope" і "open" обидва можуть бути заїканим словом для "open" , але "pen" не може бути одним, оскільки "open" не починається з "pen" .
- Заїкані слова повинні містити принаймні один з голосних "aeiou" . Наприклад, "зірка" може бути заїканим словом для "почати", оскільки воно містить "а" , але "st" не може бути заїканим словом, оскільки воно не містить жодного із згаданих голосних.
- Заїкані слова можуть з’являтися лише перед початковим словом і повинні бути повторені принаймні два рази, щоб бути дійсними (оригінальне слово не враховується у повторах). Наприклад, "oo open" має заїкані слова, але "o open o" не робить, тому що "o" після початкового слова не рахується, а "o" перед початковим словом не повторюється принаймні два рази. "go go go go go go" має п'ять повторів заїканих слів перед початковим словом і є дійсним.
- Один набір повторних заїканих слів не може містити змішаних форм, і слова повинні бути абсолютно однаковими. Наприклад, "op o op open" не вважається заїканими словами. З іншого боку, "o op op open" має заїкані слова, тому що перше "o" тут розглядається як зовсім інше слово, а два "op" s зараховуються як заїкані слова "open" .
- У випадку кількох дійсних наборів повторних заїканих слів відразу один за одним залишається лише останнє оригінальне слово. Наприклад, в «ооо оп оп оп відкритим» , то «оо о» частини розглядається як заїкався слова першого «оп» , тому вони повинні бути видалені , а потім «оп оп оп» розглядається як заїкався слова «відкрита ", і їх також слід видалити, тому після видалення заїканих слів залишиться лише " відкритий " . Можна припустити, що кілька дійсних наборів повторних заїканих слів трапляються лише зліва направо, тому фіксація "op op ooo open" призведе до "op op open" (ака
Вхідні дані
- Введення - це рядковий рядок, що містить лише англійські літери ASCII (az), цифри (0-9) та пробіли. Обкладинка букви не важлива, і ви можете вирішити прийняти малі або великі літери або обидва з них, але корпус повинен залишатися таким же, і ви не можете змінити його у висновку.
- Ви можете використовувати список букв (як
["l","i","s","t"," ","o","f"," ","l","e","t","t","e","r","s"]) замість рядка, але ви не можете використовувати список слів. Якщо ваша мова має іншу структуру введення, використовуйте її. Справа в тому, що введення не слід розділяти словами, тому вартість розділення слів на деяких мовах може насправді викликати інші творчі рішення. - Вхід може містити в собі жодне, одне або кілька заїканих слів.
- Слова та чи числа розділені одним пробілом, і вхід не буде містити подвійних пробілів поруч.
Вихідні дані
- Рядок або список букв або відповідна структура вашої мови з усіма заїканими словами, видаленими з введення.
- Вихідні слова повинні бути розділені рівно одним пробілом (таким же, як і введення).
- Допускається одинарний провідний та кінцевий новий рядок або пробіл.
Стандартні лазівки заборонені.
Тестові справи
Немає заїканих слів:
"hello world" => "hello world"
Один екземпляр повторних заїканих слів:
"ope ope ope ope open the window" => "open the window"
Кілька випадків повторного заїкання слів:
"there is is is is something un un under the the the table" => "there is something under the table"
Без заїканих слів, недостатньо повторених:
"give me the the book" => "give me the the book"
Немає заїканих слів, не має жодного згаданих голосних:
"h h help m m m me" => "h h help m m m me"
Числа - це не заїкані слова, вони не мають жодного із згаданих голосних:
"my nu nu number is 9 9 9 9876" => "my number is 9 9 9 9876"
Але слово з голосними чи числами може мати заїкані слова:
"my wi wi windows10 is slow" => "my windows10 is slow"
Різні форми заїканих слів у одній групі повторень не зараховуються:
"this is an ant antarctica does not have" => "this is an ant antarctica does not have"
Для декількох безперервних наборів заїканих слів відразу один за одним зберігайте лише останнє початкове слово:
"what a be be be beauti beauti beautiful flower" => "what a beautiful flower"
Це не випадок безлічі безперервних наборів заїканих слів відразу один за одним:
"drink wat wat wa wa water" => "drink wat wat water"
Порожній вхід:
"" => ""
Більше випадків від коментарів:
"a ab abc" => "a ab abc"
"a ab ab abc" => "a abc"
"ab ab abc abcd" => "abc abcd"
"a a ab a able" => "ab a able"
"i have ave ave average" => "i have average"
"my wi wi windows 10 is cra cra crap" => "my windows 10 is crap"
Легкий для копіювання список вищевказаних тестів:
"hello world",
"ope ope ope ope open the window",
"there is is is is something un un under the the the table",
"give me the the book",
"h h help m m m me",
"my nu nu number is 9 9 9 9876",
"my wi wi windows10 is slow",
"this is an ant antarctica does not have",
"what a be be be beauti beauti beautiful flower",
"drink wat wat wa wa water",
"",
"a ab abc",
"a ab ab abc",
"ab ab abc abcd",
"a a ab a able",
"i have ave ave average",
"my wi wi windows 10 is cra cra crap"
"drink wat wat wa wa water" => "drink wat wat water"Насправді здається, що правило повинно застосовуватися рекурсивно, так що це стає "пити воду"