Tus padres los han desafiado a ti y a tu hermano a un partido de baloncesto dos contra dos. Confiados en que van a ganar, los dejan anotar los primeros puntos, pero después empiezan a tomar el control del partido. Como necesitan un pequeño empujón, empiezan a hablar en Pig Latin, un idioma inventado de niños que es difícil de entender para quienes ya no son niños. ¡Eso les dará la ventaja que necesitan para imponerse a sus padres!
Tu tarea es traducir texto del inglés al Pig Latin. La traducción se define con cuatro reglas, que se fijan en el patrón de vocales y consonantes al principio de una palabra. Estas reglas se fijan en el uso de vocales y consonantes en cada palabra:
a, e, i, o y u
Si una palabra empieza con una vocal, o comienza con "xr" o "yt", agrega un sonido "ay" al final de la palabra.
Por ejemplo:
"apple" -> "appleay" (empieza con una vocal)"xray" -> "xrayay" (empieza con "xr")"yttria" -> "yttriaay" (empieza con "yt")Si una palabra empieza con una o más consonantes, primero mueve esas consonantes al final de la palabra y luego agrega un sonido "ay" al final de la palabra.
Por ejemplo:
"pig" -> "igp" -> "igpay" (empieza con una sola consonante)"chair" -> "airch" -> "airchay" (empieza con varias consonantes)"thrush" -> "ushthr" -> "ushthray" (empieza con varias consonantes)Si una palabra empieza con cero o más consonantes seguidas de "qu", primero mueve esas consonantes (si las hay) y la parte "qu" al final de la palabra, y luego agrega un sonido "ay" al final de la palabra.
Por ejemplo:
"quick" -> "ickqu" -> "ickquay" (empieza con "qu", sin consonantes precedentes)"square" -> "aresqu" -> "aresquay" (empieza con una consonante seguida de "qu")Si una palabra empieza con una o más consonantes seguidas de "y", primero mueve las consonantes que preceden a la "y" al final de la palabra, y luego agrega un sonido "ay" al final de la palabra.
Algunos ejemplos:
"my" -> "ym" -> "ymay" (empieza con una sola consonante seguida de "y")"rhythm" -> "ythmrh" -> "ythmrhay" (empieza con varias consonantes seguidas de "y")Las pruebas unitarias incluyen ejemplos de palabras. Intenta agrupar las consonantes sin depender de las combinaciones específicas de consonantes que aparecen en las pruebas unitarias.
Este ejercicio trabaja con datos textuales. Por razones históricas, el tipo String de Haskell es sinónimo de [Char], una lista de caracteres. Para manejar datos textuales de forma más eficiente, puedes usar el tipo Text.
Como extensión opcional de este ejercicio, puedes
Leer sobre los tipos de string en Haskell.
Agregar - text a tu lista de dependencias en package.yaml.
Importar Data.Text de la siguiente manera:
import qualified Data.Text as T
import Data.Text (Text)
Ahora puedes escribir, por ejemplo, translate :: Text -> Text y referirte a los combinadores de Data.Text como, por ejemplo, T.isSuffixOf.
Consulta la documentación de Data.Text,
Esta parte es totalmente opcional.
Regístrate en Exercism para aprender y dominar Haskell con 107 ejercicios y mentoría humana real, todo gratis.
Echamos un vistazo a la coincidencia de patrones y a las expresiones regulares, además de una buena solución en Prolog, y nos preguntamos: ¿resolviste el ejercicio o solo lograste que pasaran las pruebas?