ETL

ETL

Fácil

Introdução

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.

Instruções

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.

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

Isso precisa mudar para armazenar cada letra individualmente com a pontuação dela, em um mapeamento de um para um.

  • "a" vale 1 ponto.
  • "b" vale 3 pontos.
  • "c" vale 3 pontos.
  • "d" vale 2 pontos.
  • etc.

Como parte dessa mudança, a equipe também decidiu deixar as letras em minúsculas em vez de maiúsculas.

Note

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.

Dicas

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.

Editar via GitHub O link abre em uma nova janela ou aba
Haskell Exercism

Tudo pronto para começar ETL?

Crie sua conta no Exercism para aprender e dominar Haskell com 107 exercícios e mentoria humana de verdade, tudo de graça.