مسیرها
/
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")

دستورالعمل‌ها

در این تمرین، روشی را پیاده‌سازی می‌کنید که با آن بتوانید امتیازهای برتر محبوب‌ترین بازی سالن بازی محله‌تان را پیگیری کنید.

۵ تابع برای پیاده‌سازی دارید که بیشترشان به کار کردن با شیئی مربوط می‌شوند که امتیازهای برتر را در خود نگه می‌دارد.

1. ساخت یک تابلوی امتیازهای برتر تازه

تابعی به اسم create_score_board بسازید که یک «دیکت» برمی‌گرداند و به عنوان تابلوی امتیازهای برتر به کار می‌رود. کلیدهای این شیء اسم بازیکنان و مقدارهایش امتیاز آن‌ها خواهند بود. برای اهداف آزمایشی، می‌خواهید یک ورودی را مستقیماً در شیء بگنجانید. این ورودی اولیه باید از "The Best Ever" به عنوان اسم بازیکن و 1_000_000 به عنوان امتیاز تشکیل شده باشد.

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

2. افزودن بازیکن به تابلوی امتیاز

برای افزودن بازیکن به تابلوی امتیازهای برتر، تابع add_player را تعریف کنید. این تابع ۳ پارامتر می‌پذیرد:

  • پارامتر اول دیکت یک تابلوی امتیاز موجود است.
  • پارامتر دوم اسم بازیکن به صورت رشته است.
  • پارامتر سوم امتیاز به صورت عدد صحیح است.

تابع دیکتی برمی‌گرداند که بازیکن و امتیاز تازه به آن اضافه شده است.

3. حذف بازیکن از تابلوی امتیاز

اگر بازیکنان قوانین سالن بازی را زیر پا بگذارند، به صورت دستی از تابلوی امتیازهای برتر حذف می‌شوند. تابع remove_player را تعریف کنید که ۲ پارامتر می‌گیرد:

  • پارامتر اول دیکت یک تابلوی امتیاز موجود است.
  • پارامتر دوم اسم بازیکن به صورت رشته است.

این تابع باید دیکت را بدون بازیکنی که حذف شد برگرداند.

اگر بازیکن از ابتدا روی تابلو نبوده باشد، نباید هیچ اتفاقی برای تابلو بیفتد و باید همان‌طور که هست برگردانده شود.

4. افزایش امتیاز یک بازیکن

اگر بازیکنی بازی دیگری را در سالن بازی تمام کند، مقدار مشخصی امتیاز به امتیاز قبلی روی تابلو اضافه می‌شود. تابع update_score را پیاده‌سازی کنید که ۳ پارامتر می‌گیرد:

  • پارامتر اول دیکت یک تابلوی امتیاز موجود است.
  • پارامتر دوم اسم بازیکنی است که باید امتیازش افزایش یابد.
  • پارامتر سوم امتیازی است که می‌خواهید به امتیاز برتر ذخیره‌شده اضافه کنید.

تابع باید دیکتی با امتیاز به‌روزرسانی‌شده برگرداند.

اگر بازیکن از ابتدا روی تابلو نبوده باشد، نباید هیچ اتفاقی برای تابلو بیفتد و باید همان‌طور که هست برگردانده شود.

5. اعمال امتیازهای پاداش دوشنبه

سالن بازی دوشنبه‌ها یک تابلوی امتیاز جداگانه نگه می‌دارد. در پایان روز، هر بازیکنی که روی آن تابلو باشد، ۱۰۰ امتیاز اضافه می‌گیرد.

تابع apply_monday_bonus را پیاده‌سازی کنید که یک تابلوی امتیاز می‌پذیرد. تابع دیکتی برمی‌گرداند که امتیازهای پاداش برای هر بازیکن فهرست‌شده روی آن تابلو به آن اضافه شده است.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Gleam Exercism

آماده‌اید تخته‌ی امتیازات برتر را شروع کنید؟

در Exercism ثبت‌نام کنید تا Gleam را همراه با 33 مفهوم122 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.