المسارات
/
Elm
Elm
/
التمارين
/
تسلّل أنالين
تسلّل أنالين

تسلّل أنالين

تمرين تعلّمي

مقدمة

القيم المنطقية

النوع Bool هو أحد لبنات بناء اللغة. وهو يهدف إلى وصف ما إذا كان شيء ما صحيحًا أم خطأ، بالقيمتين True وFalse على الترتيب.

يمكن دمج القيم المنطقية باستخدام عاملي "و" && و"أو" ||، ونفيها باستخدام الدالة not.

تكون القيم المنطقية مفيدة جدًا أيضًا لإنشاء تفرعات في الكود لا تُنفَّذ إلا إذا تحققت شروط معينة. في Elm، يتم ذلك باستخدام تعبير if-then-else، كما يلي.

if someCondition || (someOtherCondition && anotherCondition) then
    doSomething
else
    doSomethingElse

التعليمات

في هذا التمرين، ستُنفّذ منطق المهمة في لعبة تقمّص أدوار جديدة يطوّرها صديق لك. الشخصية الرئيسية في اللعبة هي أنالين، فتاة شجاعة لديها كلب أليف شرس ووفيّ. ولسوء الحظ، تقع الكارثة، إذ اختُطف صديقها المفضل أثناء بحثه عن التوت في الغابة. وستحاول أنالين العثور على صديقها المفضل وتحريره، وقد تأخذ كلبها معها في هذه المهمة.

بعد أن قضت بعض الوقت في تتبّع أثر صديقها المفضل، تجد المخيّم الذي يحتجز فيه صديقها. ويتّضح أن هناك خاطفَين: فارس جبّار ورامٍ ماكر.

بعد أن وجدت الخاطفَين، تفكّر أنالين في أي من الإجراءات التالية يمكنها القيام بها:

  • هجوم سريع: يمكن شنّ هجوم سريع إذا كان الفارس نائمًا، إذ يستغرق ارتداء درعه بعض الوقت، فيصبح مكشوفًا.
  • هجوم التسلل: إذا وصلت أنالين إلى الفارس النائم دون أن يُكتشف أمرها، فإنها تلحق به 12 ضررًا بهجوم التسلل. وإلا، فإنها تلحق بالفارس 7 أضرار فقط.
  • التجسّس: يمكن التجسّس على المجموعة إذا كان أحد أفرادها على الأقل مستيقظًا. وإلا، فالتجسّس مضيعة للوقت.
  • إشارة إلى الأسير: يمكن إرسال إشارة إلى الأسير باستخدام أصوات الطيور إذا كان الأسير مستيقظًا والرامي نائمًا، لأن الرماة مدرّبون على الإشارات بأصوات الطيور فيمكنهم اعتراض الرسالة.
  • تحرير الأسير: يمكن لِأنالين أن تحاول التسلّل إلى المخيّم لتحرير الأسير. هذه مغامرة محفوفة بالمخاطر ولا يمكن أن تنجح إلا في إحدى الحالتين التاليتين:
    • إذا كان كلبها الأليف معها، فيمكنها إنقاذ الأسير إذا كان الرامي نائمًا. فالفارس يخاف من الكلب ولن يكون لدى الرامي وقت للاستعداد قبل أن تتمكّن أنالين والأسير من الهرب.
    • إذا لم يكن كلبها معها، فعليها هي والأسير أن يتسلّلا بحذر شديد! يمكن لِأنالين تحرير الأسير إذا كان الأسير مستيقظًا وكان الفارس والرامي نائمَين كلاهما، أما إذا كان الأسير نائمًا فلا يمكن إنقاذه: إذ سيفزع الأسير من ظهور أنالين المفاجئ ويوقظ الفارس والرامي.

لديك خمس مهام: تنفيذ المنطق الذي يحدّد ما إذا كانت الإجراءات المذكورة أعلاه متاحة بناءً على حالة الشخصيات الثلاث الموجودة في الغابة وما إذا كان كلب أنالين الأليف حاضرًا أم لا.

1. تحقّق مما إذا كان يمكن شنّ هجوم سريع

نفّذ الدالة canFastAttack التي تأخذ قيمة منطقية تشير إلى ما إذا كان الفارس مستيقظًا. تُرجع هذه الدالة True إذا كان يمكن شنّ هجوم سريع بناءً على حالة الفارس. وإلا، فتُرجع False:

knightIsAwake = True

canFastAttack knightIsAwake
    --> False

2. تحقّق مما إذا كان يمكن التجسّس على المجموعة

نفّذ الدالة canSpy التي تأخذ ثلاث قيم منطقية، تشير إلى ما إذا كان الفارس والرامي والأسير، على الترتيب، مستيقظين. تُرجع الدالة True إذا كان يمكن التجسّس على المجموعة، بناءً على حالة الشخصيات الثلاث. وإلا، فتُرجع False:

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False

canSpy knightIsAwake archerIsAwake prisonerIsAwake
    --> True

3. تحقّق مما إذا كان يمكن إرسال إشارة إلى الأسير

نفّذ الدالة canSignalPrisoner التي تأخذ قيمتين منطقيتين، تشير إلى ما إذا كان الرامي والأسير، على الترتيب، مستيقظين. تُرجع الدالة True إذا كان يمكن إرسال إشارة إلى الأسير، بناءً على حالة الشخصيتين. وإلا، فتُرجع False:

archerIsAwake = False
prisonerIsAwake = True

canSignalPrisoner archerIsAwake prisonerIsAwake
    --> True

4. تحقّق مما إذا كان يمكن تحرير الأسير

نفّذ الدالة canFreePrisoner التي تأخذ أربع قيم منطقية. تشير المعاملات الثلاثة الأولى إلى ما إذا كان الفارس والرامي والأسير، على الترتيب، مستيقظين. ويشير المعامل الأخير إلى ما إذا كان كلب أنالين الأليف حاضرًا. تُرجع الدالة True إذا كان يمكن تحرير الأسير بناءً على حالة الشخصيات الثلاث ووجود كلب أنالين الأليف. وإلا، فتُرجع False:

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False
petDogIsPresent = False

canFreePrisoner knightIsAwake archerIsAwake prisonerIsAwake petDogIsPresent
    --> False

5. احسب الضرر الذي قد يسبّبه هجوم التسلل

نفّذ الدالة stealthAttackDamage التي تأخذ قيمة منطقية تشير إلى ما إذا كان قد اكتُشف أمر أنالين. تُرجع هذه الدالة 7 إذا كان قد اكتُشف أمرها، و12 خلاف ذلك.

annalynIsDetected = True

stealthAttackDamage annalynIsDetected
    --> 7
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Elm Exercism

مستعد لبدء تسلّل أنالين؟

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