Заикание - это проблема, с которой многие из нас могли бы столкнуться или хотя бы ее увидеть. Хотя большинство известных программ распознавания речи имеют серьезные проблемы с заиканием, давайте представим программное обеспечение, которое понимает заикание, но не может их исправить и записывает только как есть.
Пример написанного текста таким программным обеспечением может быть таким: «Пожалуйста, будьте осторожны» . В этом примере «осторожный» - это оригинальное слово, а «ca ca» - заикающиеся слова.
Вызов
Напишите программу или функцию, которая исправляет заикающиеся слова, удаляя их из входных данных, сохраняя оригинальные слова. Например, исправленная версия «пожалуйста, будьте осторожны» будет «пожалуйста, будьте осторожны» .
Это код-гольф , выигрывает самый короткий ответ на любом языке!
Что заикаются слова?
Заикание имеет много разных вариаций. Но для простоты этого вызова мы собираемся ограничить его следующими правилами:
- Заикающиеся слова могут быть незавершенной частью или целым оригинальным словом. Под «незавершенной частью» я подразумеваю, что первоначальное слово должно начинаться именно с заикающегося слова. Например, «ope» и «open» оба могут быть запутанным словом для «open» , но «pen» не может быть одним, поскольку «open» не начинается с «pen» .
- Заикающиеся слова должны содержать хотя бы одну из гласных «aeiou» . Например, «звездочка» может быть запятнанным словом для «начала», так как оно содержит «а» , но «st» не может быть запутанным словом, поскольку оно не содержит ни одной из упомянутых гласных.
- Заикающиеся слова могут появляться только перед исходным словом и должны быть повторены не менее двух раз, чтобы быть действительными (исходное слово не учитывается в повторах). Например, «oo open» содержит заикающиеся слова, а «o open o» - нет, потому что «o» после исходного слова не считается, а «o» перед исходным словом не повторяется по крайней мере два раза. «иди, иди, иди, иди, иди» имеет пять повторений заикающихся слов перед исходным словом и является действительным.
- Один набор повторяющихся заикающихся слов не может содержать смешанные формы, и слова должны быть в точности похожи друг на друга. Например, «op o op open» не считается заикающимися словами. С другой стороны, «o op op open» содержит заикающиеся слова, потому что первое «o» здесь рассматривается как совершенно другое слово, а два «op» считаются заикающимися словами «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"действительно кажется, что правило должно применяться рекурсивно, чтобы это стало «пить воду»