Percursos
/
Gleam
Gleam
/
Exercícios
/
Quadro de Recordes
Quadro de Recordes

Quadro de Recordes

Exercício de aprendizagem

Introdução

Alias de tipos

Alias de tipos

Em Gleam, um alias de tipo permite dar um nome mais conveniente a um tipo que já existe e que, de outra forma, seria trabalhoso de escrever.

pub type Headers =
  List(#(String, String))

pub fn html_headers() -> Headers {
  [
    #("content-type", "text/html"),
    #("x-frame-options", "DENY"),
  ]
}

Quando é escrito com pub type, o alias pode ser usado fora do módulo onde é definido. Se omitires o pub, o alias fica privado e não pode ser referido noutros módulos.

Dicionários

Os dicionários em Gleam são a estrutura de dados que guarda informação em pares chave-valor. Noutras linguagens, também podem ser conhecidos como arrays associativos, hashes ou dicionários.

Qualquer tipo pode ser usado para as chaves e os valores de um dicionário, e este não garante a ordem das suas entradas quando são acedidas ou devolvidas.

Trabalhar com dicionários

Os dicionários são criados e manipulados com funções do módulo gleam/dict.

// Create an empty dict
let dict1 = dict.new()

// Create a dict with some values
let dict2 = dict.from_list([
  #("name", "Gleam"),
  #("colour", "Pink"),
])

// Add a value to a dict
let dict3 = dict.insert(dict2, "website", "https://gleam.run")

// Get a value from a dict
let name = dict.get(dict3, "name")
// -> Ok("Gleam")

Instruções

Neste exercício, estás a implementar uma forma de acompanhar as pontuações máximas do jogo mais popular do teu salão de jogos local.

Tens 5 funções para implementar, na sua maioria relacionadas com a manipulação de um objeto que guarda pontuações máximas.

1. Cria um novo quadro de pontuações

Cria uma função create_score_board que devolve um dicionário que serve como quadro de pontuações. As chaves deste objeto serão os nomes dos jogadores e os valores serão as respetivas pontuações. Para efeitos de teste, queres incluir diretamente uma entrada no objeto. Esta entrada inicial deve consistir em "The Best Ever" como nome do jogador e 1_000_000 como pontuação.

create_score_board()
// returns an object with one initial entry

2. Adiciona jogadores a um quadro de pontuações

Para adicionar um jogador ao quadro de pontuações, define a função add_player. Aceita 3 parâmetros:

  • O primeiro parâmetro é um dicionário que representa um quadro de pontuações já existente.
  • O segundo parâmetro é o nome de um jogador, como string.
  • O terceiro parâmetro é a pontuação, como int.

A função devolve um dicionário com o novo jogador e a sua pontuação adicionados.

3. Remove jogadores de um quadro de pontuações

Se os jogadores violarem as regras do salão de jogos, são removidos manualmente do quadro de pontuações. Define remove_player, que aceita 2 parâmetros:

  • O primeiro parâmetro é um dicionário que representa um quadro de pontuações já existente.
  • O segundo parâmetro é o nome do jogador, como string.

Esta função deve devolver o dicionário sem o jogador que foi removido.

Se o jogador não estiver no quadro à partida, não deve acontecer nada ao quadro: este deve ser devolvido tal como está.

4. Aumenta a pontuação de um jogador

Se um jogador terminar outro jogo no salão de jogos, é adicionada uma determinada quantidade de pontos à pontuação anterior do quadro. Implementa update_score, que aceita 3 parâmetros:

  • O primeiro parâmetro é um dicionário que representa um quadro de pontuações já existente.
  • O segundo parâmetro é o nome do jogador cuja pontuação deve ser aumentada.
  • O terceiro parâmetro é a pontuação que queres adicionar à pontuação máxima guardada.

A função deve devolver um dicionário com a pontuação atualizada.

Se o jogador não estiver no quadro à partida, não deve acontecer nada ao quadro: este deve ser devolvido tal como está.

5. Aplica os pontos de bónus de segunda-feira

O salão de jogos mantém um quadro de pontuações separado às segundas-feiras. No final do dia, cada jogador nesse quadro recebe 100 pontos adicionais.

Implementa a função apply_monday_bonus, que aceita um quadro de pontuações. A função devolve um dicionário com os pontos de bónus adicionados a cada jogador que consta desse quadro.

Editar via GitHub A ligação abre numa nova janela ou separador
Gleam Exercism

Estás pronto para começar Quadro de Recordes?

Inscreve-te no Exercism para aprenderes e dominares Gleam com 33 conceitos122 exercícios, e mentoria humana real, tudo grátis.