Вам доручено написати програму, яка зводить слова в рядку тексту, відокремлюючи їх дефісом. Це було б багато роботи, тому ви хочете пропустити деякі частини, головним чином тому, що ви не хочете мати таблицю вимов, необхідних для досконалого алгоритму. Ви також хочете зробити його якомога коротшим (і, таким чином, нечитабельним та нездійсненним), як помсту за те, що отримали це завдання.
У вас є два варіанти:
- Напишіть програму, яка бере рядок від STDIN і виводить результат на STDOUT.
- Напишіть функцію, яка приймає рядок як єдиний параметр і повертає результат.
Специфікація
- У цьому випадку рядок означає будь-яку структуру, схожу на рядок у вибраній вами мові (масиви байтів, масиви символів, рядки ...).
- Голосні звуки є
a, e, i, o, u
- Наведений рядок має
1 <= n <= 10
слова, де кожен має довжину між1 - 30
символами, включно. У вашому висновку повинні бути слова з дефісом. - Усі букви мають малі літери, а слова завжди розділені пробілами. Таким чином, вхід складається з символів
[a-z ]
- Застосовуйте правила в порядку важливості.
- Коли слово розділиться, почніть знову з правої половини слова.
Правила конспектування в порядку важливості
Підраховувати два послідовних ж голосні , як один (тобто. feet
Є тільки один голосний, але beat
і finding
мати два). Кожен склад має рівно один голосний, таким чином, є один склад для кожного голосного.
- Якщо все слово має лише чотири літери, поверніть його без змін. (пропустіть це для решти слова)
- Якщо слово має лише одну голосну, поверніть слово без змін.
- Якщо слово має дві послідовні голосні, розділіть їх (тобто.
diaspora
->di-as-po-ra
) - Коли два або більше приголосних знаходяться між двома голосними (однаковими чи різними), діліться після першого приголосного (тобто
sis-ter
), якщо не є приголосна частинаck
, в цьому випадку розділіть слово після нього. (тобто.nickel
->nick-el
) - Коли а
y
буває між двома голосними, розділіть слово після нього (наприкладpaying
->pay-ing
). - Коли один приголосний приходить між двома голосними (однаковими чи різними), діліть перед приголосним (тобто
dra-gon
) - Повертайте слово без змін, якщо жодного поділу не вдалося зробити.
Я вибрав ці правила, оскільки вони можуть застосовуватися рекурсивно без проблем і не потребують таблиць вимови. Таким чином, вони не точні, і, наприклад, правило №5 часто не є правильним. У загальному випадку все-таки є.
Приклад
In: hello world
Out: hel-lo world
In: have a nice day
Out: have a nice day
In: pour some nickel and xenon there
Out: pour some nick-el and xe-non the-re
lua
x-e-non
? Посилання на правило №4?