Você é encarregado de escrever um programa que silabifique palavras em uma sequência de texto, separando-as com um hífen. Isso daria muito trabalho, então você quer pular algumas partes, principalmente porque não deseja ter uma tabela com as pronúncias necessárias para um algoritmo perfeito. Você também deseja torná-lo o mais curto possível (e, portanto, ilegível e impossível de manter), como uma vingança por receber essa tarefa.
Você tem duas opções:
- Escreva um programa que retire a string de STDIN e envie o resultado para STDOUT.
- Escreva uma função que use a string como um único parâmetro e retorne o resultado.
Especificação
- Nesse caso, string significa qualquer construção semelhante a string no idioma de sua escolha (matrizes de bytes, matrizes de caracteres, strings ...).
- As vogais são
a, e, i, o, u - A cadeia de caracteres fornecida possui
1 <= n <= 10palavras, onde cada uma possui um comprimento entre1 - 30caracteres, inclusive. Sua saída deve ser essas palavras hifenizadas. - Todas as letras são minúsculas e as palavras são sempre separadas por espaços. Assim, a entrada consiste em caracteres
[a-z ] - Aplique regras em ordem de importância.
- Quando uma palavra é dividida, comece novamente com a metade direita da palavra.
Regras para silabificação , em ordem de importância
Dois mesmas vogais consecutivos contar como um (isto é. feetTem apenas uma vogal, mas beate findingtem dois). Cada sílaba tem exatamente uma vogal, portanto, há uma sílaba para cada vogal.
- Se a palavra inteira tiver apenas quatro letras, retorne-a inalterada. (pule isso pelo resto da palavra)
- Se a palavra tiver apenas uma vogal, retorne a palavra inalterada.
- Se a palavra tiver duas vogais consecutivas, divida entre elas (por exemplo,
diaspora->di-as-po-ra) - Quando duas ou mais consoantes estiverem entre duas vogais (iguais ou diferentes), divida após a primeira consoante (ie.
sis-ter), A menos que a parte da consoante sejack, nesse caso, divida a palavra após ela. (ie.nickel->nick-el) - Quando a
yaparecer entre duas vogais, divida a palavra depois dela (por exemplo,paying->pay-ing). - Quando uma consoante estiver entre duas vogais (iguais ou diferentes), divida antes da consoante (ou seja
dra-gon) . - Retorne a palavra inalterada se nenhuma divisão puder ser feita.
Eu escolhi essas regras, porque elas podem ser aplicadas recursivamente sem problemas e não requerem tabelas de pronúncia. Portanto, eles não são precisos e, por exemplo, a regra 5 geralmente não está correta. Em geral, porém, é.
Exemplo
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? Referência para a regra 4?