Tu travailles pour une entreprise qui développe un jeu multijoueur en ligne appelé Lexiconia.
Pour jouer, chaque joueur reçoit 13 lettres qu'il doit réarranger pour former des mots. Chaque lettre vaut un nombre de points différent, car il est plus facile de former des mots avec certaines lettres qu'avec d'autres.
Le jeu a été lancé à l'origine en anglais, mais il est très populaire, et l'entreprise souhaite désormais l'étendre à d'autres langues.
Chaque langue doit prendre en charge des valeurs en points différentes pour les lettres. Ces valeurs sont déterminées par la fréquence d'utilisation des lettres par rapport aux autres lettres de cette langue.
Par exemple, la lettre « C » est assez courante en anglais et ne vaut que 3 points. En norvégien, en revanche, c'est une lettre très rare, qui vaut 10 points.
Pour faciliter l'ajout de nouvelles langues, ton équipe doit changer la façon dont les lettres et leurs valeurs en points sont stockées dans le jeu.
Ta tâche consiste à modifier le format des données des lettres et de leurs valeurs en points dans le jeu.
Pour l'instant, les lettres sont stockées en groupes selon leur score, dans une correspondance un-à-plusieurs.
Il faut maintenant stocker chaque lettre individuellement avec son score, dans une correspondance un-à-un.
Dans le cadre de ce changement, l'équipe a aussi décidé de passer les lettres en minuscules plutôt qu'en majuscules.
Si tu veux voir comment les données étaient structurées auparavant et comment elles doivent évoluer, jette un œil aux exemples de la suite de tests.
Cet exercice porte sur des données textuelles : pour des raisons historiques, le type String de Haskell est synonyme de [Char], une liste de caractères. Pour manipuler les données textuelles plus efficacement, on peut utiliser le type Text.
Pour prolonger cet exercice de façon facultative, tu peux :
Te renseigner sur les types de chaînes de caractères en Haskell.
Ajouter - text à la liste des dépendances dans package.yaml.
Importer Data.Text de la façon suivante :
import qualified Data.Text as T
import Data.Text (Text)
Écrire maintenant par exemple transform :: Map Int Text -> Map Char Int et faire appel aux combinateurs de Data.Text comme T.toLower.
Consulter la documentation de Data.Text.
Cette partie est entièrement facultative.
Inscris-toi sur Exercism pour apprendre et maîtriser Haskell avec 107 exercices, et un vrai mentorat humain, le tout gratuitement.