ETL

ETL

Fácil

Introducción

Trabajas para una empresa que hace un juego multijugador en línea llamado Lexiconia.

Para jugar, a cada jugador se le dan 13 letras, que debe reordenar para formar palabras. Distintas letras tienen distintos valores de puntos, ya que es más fácil formar palabras con unas letras que con otras.

El juego se lanzó originalmente en inglés, pero es muy popular, y ahora la empresa quiere expandirse también a otros idiomas.

Diferentes idiomas necesitan admitir diferentes valores de puntos para las letras. Los valores de puntos se determinan según la frecuencia con que se usan las letras, en comparación con otras letras de ese idioma.

Por ejemplo, la letra «C» es bastante común en inglés y solo vale 3 puntos. Pero en noruego es una letra muy poco frecuente y vale 10 puntos.

Para facilitar la incorporación de nuevos idiomas, tu equipo necesita cambiar la forma en que se almacenan las letras y sus valores de puntos en el juego.

Instrucciones

Tu tarea es cambiar el formato de los datos de las letras y de sus valores en puntos en el juego.

Actualmente, las letras se almacenan en grupos según su puntaje, en una correspondencia de uno a muchos.

  • 1 punto: «A», «E», «I», «O», «U», «L», «N», «R», «S», «T»,
  • 2 puntos: «D», «G»,
  • 3 puntos: «B», «C», «M», «P»,
  • 4 puntos: «F», «H», «V», «W», «Y»,
  • 5 puntos: «K»,
  • 8 puntos: «J», «X»,
  • 10 puntos: «Q», «Z»,

Esto debe cambiarse para almacenar cada letra individual con su puntaje en una correspondencia de uno a uno.

  • «a» vale 1 punto.
  • «b» vale 3 puntos.
  • «c» vale 3 puntos.
  • «d» vale 2 puntos.
  • etc.

Como parte de este cambio, el equipo también decidió cambiar las letras a minúsculas en lugar de mayúsculas.

Note

Si quieres ver cómo estaban estructurados los datos antes y cómo tienen que cambiar, échale un vistazo a los ejemplos del conjunto de pruebas.

Pistas

Este ejercicio trabaja con datos de texto. Por razones históricas, el tipo String de Haskell es sinónimo de [Char], una lista de caracteres. Para manejar los datos de texto de forma más eficiente, se puede 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, transform :: Map Int Text -> Map Char Int y referirte a los combinadores de Data.Text como, por ejemplo, T.toLower.

  • Consultar 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 ETL?

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