Rutas
/
Gleam
Gleam
/
Ejercicios
/
Tabla de puntuaciones
Tabla de puntuaciones

Tabla de puntuaciones

Ejercicio de aprendizaje

Introducción

Alias de tipo

Alias de tipo

Un alias de tipo puede usarse en Gleam para dar un nombre conveniente a un tipo existente que, de otro modo, sería engorroso de escribir.

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

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

Cuando se escribe con pub type, el alias puede usarse fuera del módulo en el que se define. Si se omite pub, el alias es privado y no se puede hacer referencia a él desde otros módulos.

Diccionarios

Los diccionarios en Gleam son la estructura de datos que permite almacenar información en pares clave-valor. En otros lenguajes, también pueden conocerse como arrays asociativos, hashes o diccionarios.

En un diccionario se puede usar cualquier tipo para las claves y los valores, y no se garantiza el orden de sus entradas al acceder a ellas o devolverlas.

Trabajar con diccionarios

Los diccionarios se crean y manipulan con funciones del 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")

Instrucciones

En este ejercicio vas a implementar una forma de llevar un registro de las puntuaciones más altas del juego más popular de tu salón recreativo local.

Tienes que implementar 5 funciones, la mayoría relacionadas con la manipulación de un objeto que guarda las puntuaciones más altas.

1. Crear una nueva tabla de puntuaciones

Crea una función create_score_board que devuelva un dict que sirva como tabla de puntuaciones. Las claves de este objeto serán los nombres de los jugadores y los valores, sus puntuaciones. Para poder hacer pruebas, quieres incluir directamente una entrada en el objeto. Esta entrada inicial debe constar de "The Best Ever" como nombre del jugador y 1_000_000 como puntuación.

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

2. Añadir jugadores a una tabla de puntuaciones

Para añadir un jugador a la tabla de puntuaciones, define la función add_player. Acepta 3 parámetros:

  • El primer parámetro es un dict de una tabla de puntuaciones existente.
  • El segundo parámetro es el nombre de un jugador como string.
  • El tercer parámetro es la puntuación como int.

La función devuelve un dict con el nuevo jugador y su puntuación añadidos.

3. Eliminar jugadores de una tabla de puntuaciones

Si los jugadores incumplen las normas del salón recreativo, se les elimina manualmente de la tabla de puntuaciones. Define remove_player, que acepta 2 parámetros:

  • El primer parámetro es un dict de una tabla de puntuaciones existente.
  • El segundo parámetro es el nombre del jugador como string.

Esta función debe devolver el dict sin el jugador que se ha eliminado.

Si el jugador no estaba en la tabla desde el principio, no debe ocurrirle nada a la tabla: debe devolverse tal cual.

4. Aumentar la puntuación de un jugador

Si un jugador termina otra partida en el salón recreativo, se sumará una cierta cantidad de puntos a la puntuación que ya tenía en la tabla. Implementa update_score, que acepta 3 parámetros:

  • El primer parámetro es un dict de una tabla de puntuaciones existente.
  • El segundo parámetro es el nombre del jugador cuya puntuación se debe aumentar.
  • El tercer parámetro es la puntuación que deseas sumar a la puntuación máxima almacenada.

La función debe devolver un dict con la puntuación actualizada.

Si el jugador no estaba en la tabla desde el principio, no debe ocurrirle nada a la tabla: debe devolverse tal cual.

5. Aplicar los puntos de bonificación del lunes

El salón recreativo lleva una tabla de puntuaciones aparte los lunes. Al final del día, cada jugador de esa tabla recibe 100 puntos adicionales.

Implementa la función apply_monday_bonus, que acepta una tabla de puntuaciones. La función devuelve un dict con los puntos de bonificación sumados para cada jugador que figura en esa tabla.

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

¿Listo para empezar Tabla de puntuaciones?

Regístrate en Exercism para aprender y dominar Gleam con 33 conceptos122 ejercicios y mentoría humana real, todo gratis.