Você trabalha em uma empresa que faz um jogo multiplayer online chamado Lexiconia.
Para jogar, cada pessoa recebe 13 letras, que precisa reorganizar para formar palavras. Letras diferentes valem pontos diferentes, já que é mais fácil formar palavras com algumas letras do que com outras.
O jogo foi lançado originalmente em inglês, mas faz muito sucesso, e agora a empresa quer expandir para outros idiomas também.
Idiomas diferentes precisam ter valores de pontos diferentes para as letras. Os valores de pontos são determinados pela frequência com que as letras são usadas, em comparação com as outras letras daquele idioma.
Por exemplo, a letra 'C' é bem comum em inglês e vale só 3 pontos. Mas em norueguês é uma letra muito rara e vale 10 pontos.
Para facilitar a adição de novos idiomas, sua equipe precisa mudar a forma como as letras e seus valores de pontos são armazenados no jogo.
Sua tarefa é mudar o formato dos dados das letras e dos valores em pontos delas no jogo.
Atualmente, as letras ficam armazenadas em grupos com base na pontuação delas, em um mapeamento de um para muitos.
Isso precisa mudar para armazenar cada letra individualmente com a pontuação dela, em um mapeamento de um para um.
Como parte dessa mudança, a equipe também decidiu deixar as letras em minúsculas em vez de maiúsculas.
Se você quiser ver como os dados eram estruturados antes e como eles precisam mudar, dê uma olhada nos exemplos na suíte de testes.
Este exercício trabalha com dados textuais. Por razões históricas, o tipo String de Haskell é sinônimo de [Char], uma lista de caracteres. Para lidar com dados textuais de forma mais eficiente, é possível usar o tipo Text.
Como extensão opcional deste exercício, você pode
Ler sobre tipos de string em Haskell.
Adicionar - text à sua lista de dependências no package.yaml.
Importar Data.Text da seguinte forma:
import qualified Data.Text as T
import Data.Text (Text)
Agora você pode escrever, por exemplo, transform :: Map Int Text -> Map Char Int e se referir aos combinadores de Data.Text como, por exemplo, T.toLower.
Consultar a documentação de Data.Text.
Esta parte é totalmente opcional.
Crie sua conta no Exercism para aprender e dominar Haskell com 107 exercícios e mentoria humana de verdade, tudo de graça.