ETL

ETL

Fácil

Introducción

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

Para jugar, cada jugador recibe 13 letras, que debe reordenar para formar palabras. Unas letras valen más puntos que otras, ya que con algunas es más fácil formar palabras que con otras.

El juego se lanzó originalmente en inglés, pero tiene mucho éxito, y ahora la empresa quiere ampliarlo también a otros idiomas.

Cada idioma necesita admitir distintos valores de puntos para las letras. Los valores de puntos vienen determinados por la frecuencia con que se usan las letras en comparación con las demás 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 que sea más fácil añadir 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 consiste en cambiar el formato de los datos de las letras y sus valores en puntos en el juego.

Actualmente, las letras se almacenan en grupos según su puntuación, 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 hay que cambiarlo para almacenar cada letra individual con su puntuación 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 ha decidido 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, echa un vistazo a los ejemplos del conjunto de pruebas.

Pistas

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 un manejo más eficiente de los datos textuales, se puede usar el tipo Text.

Como extensión opcional de este ejercicio, puedes

  • Lee sobre los tipos de string en Haskell.

  • Añade - text a tu lista de dependencias en package.yaml.

  • Importa 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.

  • Consulta la documentación de Data.Text.

Esta parte es totalmente opcional.

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

¿Listo para empezar ETL?

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