Seus pais desafiaram você e seus irmãos para uma partida de basquete dois contra dois. Confiante de que vão ganhar, eles deixam você marcar os primeiros pontos, mas depois começam a dominar o jogo. Precisando de um empurrãozinho, você começa a falar em Pig Latin, uma língua infantil inventada que é difícil para quem não é criança entender. Isso vai te dar a vantagem para vencer seus pais!
Sua tarefa é traduzir texto do inglês para o Pig Latin. A tradução é definida por quatro regras, que observam o padrão de vogais e consoantes no início de uma palavra. Essas regras observam como cada palavra usa vogais e consoantes:
a, e, i, o e u
Se uma palavra começa com uma vogal, ou começa com "xr" ou "yt", adicione um som "ay" ao final da palavra.
Por exemplo:
"apple" -> "appleay" (começa com vogal)"xray" -> "xrayay" (começa com "xr")"yttria" -> "yttriaay" (começa com "yt")Se uma palavra começa com uma ou mais consoantes, primeiro mova essas consoantes para o final da palavra e depois adicione um som "ay" ao final da palavra.
Por exemplo:
"pig" -> "igp" -> "igpay" (começa com uma única consoante)"chair" -> "airch" -> "airchay" (começa com várias consoantes)"thrush" -> "ushthr" -> "ushthray" (começa com várias consoantes)Se uma palavra começa com zero ou mais consoantes seguidas de "qu", primeiro mova essas consoantes (se houver) e a parte "qu" para o final da palavra, e depois adicione um som "ay" ao final da palavra.
Por exemplo:
"quick" -> "ickqu" -> "ickquay" (começa com "qu", sem consoantes antes)"square" -> "aresqu" -> "aresquay" (começa com uma consoante seguida de "qu")Se uma palavra começa com uma ou mais consoantes seguidas de "y", primeiro mova as consoantes que vêm antes do "y" para o final da palavra, e depois adicione um som "ay" ao final da palavra.
Alguns exemplos:
"my" -> "ym" -> "ymay" (começa com uma única consoante seguida de "y")"rhythm" -> "ythmrh" -> "ythmrhay" (começa com várias consoantes seguidas de "y")Os testes unitários fornecem exemplos de palavras. Tente agrupar as consoantes independentemente das combinações específicas de consoantes usadas nos testes unitários.
Este exercício trabalha com dados textuais. Por razões históricas, o tipo String do Haskell é sinônimo de [Char], uma lista de caracteres. Para lidar com dados textuais de forma mais eficiente, dá para usar o tipo Text.
Como extensão opcional deste exercício, você pode
Ler sobre tipos de string em Haskell.
Adicionar - text à sua lista de dependências em package.yaml.
Importar Data.Text da seguinte forma:
import qualified Data.Text as T
import Data.Text (Text)
Agora você pode escrever, por exemplo, translate :: Text -> Text e se referir aos combinadores de Data.Text como, por exemplo, T.isSuffixOf.
Consultar a documentação de Data.Text,
Esta parte é totalmente opcional.
Crie sua conta no Exercism para aprender e dominar Haskell com 107 exercícios e mentoria humana de verdade, tudo de graça.
Damos uma olhada em casamento de padrões e expressões regulares, além de uma bela solução em Prolog, e perguntamos: você resolveu o exercício ou só fez os testes passarem?