Ti viene assegnato il compito di scrivere un programma che sillaba le parole in una stringa di testo, separandole con un trattino. Sarebbe un sacco di lavoro, quindi vuoi saltare alcune parti, principalmente perché non vuoi avere una tabella delle pronunce richieste per un algoritmo perfetto. Vuoi anche renderlo il più breve possibile (e quindi illeggibile e non realizzabile) come una vendetta per aver ricevuto questo incarico.
Hai due scelte:
- Scrivi un programma che prende la stringa da STDIN e trasmette il risultato a STDOUT.
- Scrivi una funzione che accetta la stringa come singolo parametro e restituisce il risultato.
specificazione
- In questo caso, stringa significa qualsiasi costrutto simile a una stringa nella tua lingua preferita (array di byte, array di caratteri, stringhe ...).
- Le vocali lo sono
a, e, i, o, u - La stringa fornita ha
1 <= n <= 10parole, ognuna delle quali ha una lunghezza tra i1 - 30caratteri, inclusi. Il tuo output dovrebbe essere sillabato. - Tutte le lettere sono minuscole e le parole sono sempre separate da spazi. Pertanto, l'input è costituito da caratteri
[a-z ] - Applica le regole in ordine di importanza.
- Quando una parola viene divisa, ricominciare con la metà destra della parola.
Regole per la sillabazione , in ordine di importanza
Numero due stesse vocali consecutivi come unico (es. feetHa una sola vocale, ma beate findinghanno due). Ogni sillaba ha esattamente una vocale, quindi c'è una sillaba per ogni vocale.
- Se l' intera parola ha solo quattro lettere, restituiscila invariata. (salta questo per il resto della parola)
- Se la parola ha solo una vocale, restituisce la parola invariata.
- Se la parola ha due vocali consecutive, dividi tra loro (es.
diaspora->di-as-po-ra) - Quando due o più consonanti si trovano tra due vocali (uguali o diverse), dividere dopo la prima consonante (cioè.
sis-ter) A meno che non sia la parte consonanteck, nel qual caso dividere la parola dopo di essa. (es.nickel->nick-el) - Quando una si
ytrova tra due vocali, dividi la parola dopo di essa (es.paying->pay-ing). - Quando una consonante si trova tra due vocali (uguali o diverse), dividere prima della consonante (cioè.
dra-gon) - Restituisce la parola invariata se non è stato possibile eseguire alcuna divisione.
Ho scelto queste regole, perché possono essere applicate in modo ricorsivo senza problemi e non richiedono tabelle di pronuncia. Pertanto, non sono accurati e, ad esempio, la regola n. 5 spesso non è corretta. In generale, tuttavia, lo è.
Esempio
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? Riferimento per la regola n. 4?