قبو النبيذ

قبو النبيذ

تمرين تعلّمي

مقدمة

قوائم الكلمات المفتاحية

قوائم الكلمات المفتاحية بنية بيانات من أزواج المفتاح والقيمة.

[month: "April", year: 2018]

قوائم الكلمات المفتاحية هي قوائم مكوّنة من الصفوف {key, value}، ويمكن أيضًا كتابتها بهذه الصورة، لكن الصيغة الأقصر أكثر انتشارًا.

[month: "April"] == [{:month, "April"}]
# => true

يجب أن تكون المفاتيح في قائمة الكلمات المفتاحية من الذرات، أما القيم فيمكن أن تكون أي شيء. ويمكن استخدام كل مفتاح أكثر من مرة. أزواج المفتاح والقيمة في قائمة الكلمات المفتاحية مرتّبة.

يمكنك التعامل مع قوائم الكلمات المفتاحية بالأساليب نفسها التي تستخدمها مع القوائم، أو يمكنك استخدام وحدة Keyword.

التعليمات

أنت مدير مطعم فاخر يمتلك قبو نبيذ كبيرًا. وكثير من عملائك من عشّاق النبيذ المتطلّبين. وليس من السهل العثور على زجاجة النبيذ المناسبة لعميل بعينه.

وبصفتك صاحب مطعم متمكّنًا من التقنية، قرّرت تسريع عملية اختيار النبيذ بكتابة تطبيق يتيح للضيوف تصفية أنواع النبيذ لديك وفق تفضيلاتهم.

1. اشرح ألوان النبيذ

على شاشة الترحيب في تطبيقك، تريد عرض شرح موجز لكل لون من ألوان النبيذ.

نفّذ الدالة WineCellar.explain_colors/0. لا تأخذ أي وسائط، وتُرجع قائمة كلمات مفتاحية مفاتيحها ألوان النبيذ وقيمها الشروح.

اللون الشرح
:white Fermented without skin contact.
:red Fermented with skin contact using dark-colored grapes.
:rose Fermented with some skin contact, but not enough to qualify as a red wine.

2. احصل على كل أنواع النبيذ ذات لون معيّن

تُمثَّل زجاجة النبيذ كثُلاثية من نوع العنب والسنة وبلد المنشأ. وتُخزَّن أنواع النبيذ حسب لون النبيذ في قائمة كلمات مفتاحية.

[
  white: {"Chardonnay", 2015, "Italy"},
  white: {"Pinot grigio", 2017, "Germany"},
  red: {"Pinot noir", 2016, "France"},
  rose: {"Dornfelder", 2018, "Germany"}
]

نفّذ الدالة WineCellar.filter/3. ينبغي أن تأخذ قائمة كلمات مفتاحية من أنواع النبيذ، وذرّة لون، وقائمة كلمات مفتاحية من الخيارات، بقيمة افتراضية هي []. وينبغي أن تُرجع الدالة قائمة بأنواع النبيذ ذات اللون المعيّن.

WineCellar.filter(
  [
    white: {"Chardonnay", 2015, "Italy"},
    white: {"Pinot grigio", 2017, "Germany"},
    red: {"Pinot noir", 2016, "France"},
    rose: {"Dornfelder", 2018, "Germany"}
  ],
  :white
)

# => [
#      {"Chardonnay", 2015, "Italy"},
#      {"Pinot grigio", 2017, "Germany"}
#    ]

3. احصل على كل أنواع النبيذ ذات اللون المعيّن المعبّأة في سنة معيّنة

وسّع الدالة WineCellar.filter/3. عند تمرير خيار :year، ينبغي أن تُرجع الدالة قائمة بأنواع النبيذ ذات اللون المعيّن من سنة معيّنة.

استخدم الدالة WineCellar.filter_by_year/2 المنفّذة مسبقًا. تأخذ قائمة بأنواع النبيذ وسنة كوسائط، وتُرجع قائمة بأنواع النبيذ من سنة معيّنة.

WineCellar.filter(
  [
    white: {"Chardonnay", 2015, "Italy"},
    white: {"Pinot grigio", 2017, "Germany"},
    red: {"Pinot noir", 2016, "France"},
    rose: {"Dornfelder", 2018, "Germany"}
  ],
  :white,
  year: 2015
)

# => [
#      {"Chardonnay", 2015, "Italy"}
#    ]

4. احصل على كل أنواع النبيذ ذات اللون المعيّن المعبّأة في بلد معيّن

وسّع الدالة WineCellar.filter/3. عند تمرير خيار :country، ينبغي أن تُرجع الدالة قائمة بأنواع النبيذ ذات اللون المعيّن من بلد معيّن.

استخدم الدالة WineCellar.filter_by_country/2 المنفّذة مسبقًا. تأخذ قائمة بأنواع النبيذ وبلدًا كوسائط، وتُرجع قائمة بأنواع النبيذ من بلد معيّن.

تأكّد من أن الدالة تعمل عند تمرير الخيارين :year و :country معًا، بأي ترتيب.

WineCellar.filter(
  [
    white: {"Chardonnay", 2015, "Italy"},
    white: {"Pinot grigio", 2017, "Germany"},
    red: {"Pinot noir", 2016, "France"},
    rose: {"Dornfelder", 2018, "Germany"}
  ],
  :white,
  year: 2015,
  country: "Germany"
)

# => []
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Elixir Exercism

مستعد لبدء قبو النبيذ؟

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