Vous êtes chargé d'écrire un programme qui syllabifie les mots dans une chaîne de texte, en les séparant par un tiret. Ce serait beaucoup de travail, donc vous voulez sauter certaines parties, principalement parce que vous ne voulez pas avoir un tableau des prononciations requises pour un algorithme parfait. Vous voulez aussi le rendre aussi court (et donc illisible et non maintenable) que possible comme une revanche pour avoir reçu cette mission.
Vous avez deux choix:
- Écrivez un programme qui prend la chaîne de STDIN et renvoie le résultat à STDOUT.
- Écrivez une fonction qui prend la chaîne en tant que paramètre unique et renvoie le résultat.
spécification
- Dans ce cas, chaîne signifie toute construction de type chaîne dans la langue de votre choix (tableaux d'octets, tableaux de caractères, chaînes ...).
- Les voyelles sont
a, e, i, o, u - La chaîne donnée a des
1 <= n <= 10mots, où chacun a une longueur entre les1 - 30caractères, inclus .. Votre sortie doit être ces mots avec un trait d'union. - Toutes les lettres sont en minuscules et les mots sont toujours séparés par des espaces. Ainsi, l'entrée se compose de caractères
[a-z ] - Appliquez les règles par ordre d'importance.
- Lorsqu'un mot est divisé, recommencez avec la moitié droite du mot.
Règles de syllabification , par ordre d'importance
Deux mêmes voyelles consécutives compter que l' un (ie. feetNe comporte qu'une seule voyelle, mais beatet findingont deux). Chaque syllabe a exactement une voyelle, donc il y a une syllabe pour chaque voyelle.
- Si le mot entier n'a que quatre lettres, renvoyez-le inchangé. (sautez ceci pour le reste du mot)
- Si le mot n'a qu'une voyelle, renvoyez-le inchangé.
- Si le mot a deux voyelles consécutives, divisez-les (c.-à-d.
diaspora->di-as-po-ra) - Lorsque deux consonnes ou plus se trouvent entre deux voyelles (identiques ou différentes), divisez après la première consonne (c'est-à-dire
sis-ter) à moins que la partie consonne ne soitck, auquel cas divisez le mot après. (c'est-à-direnickel->nick-el) - Quand a
yvient entre deux voyelles, divisez le mot après (par exemplepaying->pay-ing). - Quand une consonne vient entre deux voyelles (identiques ou différentes), divisez avant la consonne (ie.
dra-gon) - Renvoyez le mot inchangé si aucune division n'a pu être effectuée.
J'ai choisi ces règles, car elles peuvent être appliquées récursivement sans problème et ne nécessitent aucune table de prononciation. Ainsi, ils ne sont pas exacts et, par exemple, la règle n ° 5 est souvent incorrecte. Dans le cas général cependant, c'est le cas.
Exemple
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? Référence pour la règle # 4?