المسارات
/
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 معاملات:

  • المعامل الأول هو قاموس لوحة نتائج موجود.
  • المعامل الثاني هو اسم اللاعب كسلسلة نصية.
  • المعامل الثالث هو النتيجة كعدد صحيح.

تُرجع الدالة قاموسًا مع اللاعب والنتيجة المضافين.

3. أزل لاعبين من لوحة النتائج

إذا خالف اللاعبون قواعد قاعة الألعاب، يُزالون يدويًا من لوحة النتائج الأعلى. عرّف remove_player التي تأخذ معاملين:

  • المعامل الأول هو قاموس لوحة نتائج موجود.
  • المعامل الثاني هو اسم اللاعب كسلسلة نصية.

يجب أن تُرجع هذه الدالة القاموس بدون اللاعب الذي أُزيل.

إذا لم يكن اللاعب على اللوحة من الأساس، فلا يجب أن يحدث أي شيء للوحة، بل تُرجع كما هي.

4. زد نتيجة لاعب

إذا أنهى لاعب لعبة أخرى في قاعة الألعاب، تُضاف كمية معينة من النقاط إلى النتيجة السابقة على اللوحة. نفّذ update_score، التي تأخذ 3 معاملات:

  • المعامل الأول هو قاموس لوحة نتائج موجود.
  • المعامل الثاني هو اسم اللاعب الذي يجب زيادة نتيجته.
  • المعامل الثالث هو النتيجة التي تريد إضافتها إلى النتيجة الأعلى المخزنة.

يجب أن تُرجع الدالة قاموسًا بالنتيجة المحدَّثة.

إذا لم يكن اللاعب على اللوحة من الأساس، فلا يجب أن يحدث أي شيء للوحة، بل تُرجع كما هي.

5. طبّق نقاط مكافأة الاثنين

تحتفظ قاعة الألعاب بلوحة نتائج منفصلة أيام الاثنين. في نهاية اليوم، يحصل كل لاعب على تلك اللوحة على 100 نقطة إضافية.

نفّذ الدالة apply_monday_bonus التي تقبل لوحة نتائج. تُرجع الدالة قاموسًا مع نقاط المكافأة المضافة لكل لاعب مُدرج على تلك اللوحة.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Gleam Exercism

مستعد لبدء لوحة أفضل النتائج؟

سجّل في Exercism لتتعلّم وتتقن Gleam عبر 33 مفهومًا122 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.