Треки
/
Gleam
Gleam
/
Вправи
/
Табло рекордів
Табло рекордів

Табло рекордів

Навчальна вправа

Вступ

Псевдоніми типів

Псевдоніми типів

Псевдонім типу в Gleam дає зручну назву для наявного типу, який інакше було б громіздко писати.

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

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

Якщо написати pub type, псевдонім можна використовувати поза модулем, у якому його визначено. Якщо pub пропущено, псевдонім є приватним, і на нього не можна посилатися в інших модулях.

Словники

Словники в Gleam - це структура даних для зберігання інформації у вигляді пар ключ-значення. В інших мовах їх також можуть називати асоціативними масивами, хешами або словниками.

Для ключів і значень у словнику можна використовувати будь-який тип, і словники не гарантують порядку своїх записів, коли до них звертаються або їх повертають.

Робота зі словниками

Словники створюють і обробляють за допомогою функцій з модуля 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")

Вказівки

У цій вправі ми реалізовуємо спосіб вести облік рекордів для найпопулярнішої гри в нашому місцевому залі ігрових автоматів.

Нам потрібно реалізувати 5 функцій, здебільшого для роботи з обʼєктом, у якому зберігаються рекорди.

1. Створення нової таблиці рекордів

Створіть функцію create_score_board, яка повертає словник, що слугує таблицею рекордів. Ключами цього обʼєкта будуть імена гравців, а значеннями - їхні рахунки. Для тестування потрібно одразу внести до обʼєкта один запис. Цей початковий запис має складатися з "The Best Ever" як імені гравця та 1_000_000 як рахунку.

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

2. Додавання гравців до таблиці рекордів

Щоб додати гравця до таблиці рекордів, визначте функцію add_player. Вона приймає 3 параметри:

  • Перший параметр - це наявний словник таблиці рекордів.
  • Другий параметр - це імʼя гравця у вигляді рядка тексту (англ. string).
  • Третій параметр - це рахунок у вигляді цілого числа.

Функція повертає словник із доданими новим гравцем і рахунком.

3. Видалення гравців із таблиці рекордів

Якщо гравці порушують правила залу ігрових автоматів, їх вручну видаляють із таблиці рекордів. Визначте remove_player, яка приймає 2 параметри:

  • Перший параметр - це наявний словник таблиці рекордів.
  • Другий параметр - це імʼя гравця у вигляді рядка тексту.

Ця функція має повертати словник без видаленого гравця.

Якщо гравця взагалі не було в таблиці, з таблицею нічого не має статися: її треба повернути без змін.

4. Збільшення рахунку гравця

Якщо гравець завершує ще одну гру в залі ігрових автоматів, до попереднього рахунку в таблиці додається певна кількість очок. Реалізуйте update_score, яка приймає 3 параметри:

  • Перший параметр - це наявний словник таблиці рекордів.
  • Другий параметр - це імʼя гравця, чий рахунок потрібно збільшити.
  • Третій параметр - це рахунок, який потрібно додати до збереженого рекорду.

Функція має повертати словник з оновленим рахунком.

Якщо гравця взагалі не було в таблиці, з таблицею нічого не має статися: її треба повернути без змін.

5. Нарахування бонусних очок за понеділок

У залі ігрових автоматів по понеділках ведеться окрема таблиця рекордів. Наприкінці дня кожен гравець із цієї таблиці отримує 100 додаткових очок.

Реалізуйте функцію apply_monday_bonus, яка приймає таблицю рекордів. Функція повертає словник із доданими бонусними очками для кожного гравця, зазначеного в цій таблиці.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Gleam Exercism

Час розпочати Табло рекордів?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Gleam, а також 33 концепції122 вправи та справжнє наставництво від людей, і все це безкоштовно.