Twoim zadaniem jest napisanie programu, który sylabuje słowa w ciągu tekstu, oddzielając je myślnikiem. To byłoby dużo pracy, więc chcesz pominąć niektóre części, głównie dlatego, że nie chcesz mieć tabeli wymowy wymaganej dla idealnego algorytmu. Chcesz również, aby był on tak krótki (a przez to nieczytelny i niemożliwy do utrzymania), jak to możliwe, jako zemsta za otrzymanie tego zadania.
Masz dwie możliwości:
- Napisz program, który pobiera ciąg ze STDIN i przekazuje wynik do STDOUT.
- Napisz funkcję, która bierze ciąg jako pojedynczy parametr i zwraca wynik.
Specyfikacja
- W tym przypadku łańcuch oznacza dowolną konstrukcję podobną do łańcucha w wybranym języku (tablice bajtów, tablice znaków, łańcuchy ...).
- Samogłoski są
a, e, i, o, u - Podany ciąg ma
1 <= n <= 10słowa, przy czym każdy ma długość między1 - 30znakami, włącznie. Twoje dane wyjściowe powinny być wyrazami dzielonymi. - Wszystkie litery są pisane małymi literami, a słowa zawsze są oddzielane spacjami. Zatem dane wejściowe składają się ze znaków
[a-z ] - Zastosuj reguły według ważności.
- Kiedy słowo jest podzielone, zacznij od prawej połowy słowa.
Reguły sylabizacji , w kolejności ich ważności
Dwa kolejne same samogłoski liczyć jako jeden (tj. feetPosiada tylko jedną samogłoskę, ale beati findingmają dwa). Każda sylaba ma dokładnie jedną samogłoskę, dlatego dla każdej samogłoski jest jedna sylaba.
- Jeśli całe słowo ma tylko cztery litery, zwróć je bez zmian. (pomiń to do końca słowa)
- Jeśli słowo ma tylko jedną samogłoskę, zwróć słowo bez zmian.
- Jeśli słowo ma dwie kolejne samogłoski, podziel je między sobą (tj.
diaspora->di-as-po-ra) - Kiedy dwie lub więcej spółgłosek występuje między dwiema samogłoskami (ta sama lub inna), podziel po pierwszej spółgłosce (tj.
sis-ter), Chyba że część spółgłoski jestck, w takim przypadku podziel słowo po niej. (tj.nickel->nick-el) - Kiedy a
ywystępuje między dwiema samogłoskami, podziel słowo po nim (np.paying->pay-ing). - Gdy jedna spółgłoska występuje między dwiema samogłoskami (ta sama lub inna), podziel się przed spółgłoską (tj.
dra-gon) - Zwróć słowo bez zmian, jeśli nie można wykonać podziału.
Wybrałem te reguły, ponieważ można je stosować rekurencyjnie bez problemów i nie wymagają tabel wymowy. Dlatego nie są one dokładne i na przykład reguła nr 5 często nie jest poprawna. Jednak w ogólnym przypadku tak jest.
Przykład
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? Odniesienie do reguły nr 4?