Pig Latin

Pig Latin

Intermedia

Introducción

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!

Instrucciones

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:

  • las vocales: las letras a, e, i, o y u
  • las consonantes: las otras 21 letras del alfabeto inglés

Regla 1

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")

Regla 2

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)

Regla 3

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")

Regla 4

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")

Pistas

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.

Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Haskell Exercism

¿Todo listo para empezar Pig Latin?

Regístrate en Exercism para aprender y dominar Haskell con 107 ejercicios y mentoría humana real, todo gratis.

¡Profundiza en Pig Latin!

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?