تسلّل أنالين

تسلّل أنالين

تمرين تعلّمي

مقدمة

القيمة المنطقية تمثّل واحدة من قيمتين: true أو false. تُستخدم العوامل المنطقية (!، &&، ||) عادةً مع القيم المنطقية، وهي تُرجع قيمة منطقية.

التعليمات

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

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

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

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

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

1. تحقّق مما إذا كان فعل "الهجوم السريع" ممكنًا

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

const knightIsAwake = true;
canExecuteFastAttack(knightIsAwake);
// => false

2. تحقّق مما إذا كان فعل "التجسّس" ممكنًا

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

const knightIsAwake = false;
const archerIsAwake = true;
const prisonerIsAwake = false;
canSpy(knightIsAwake, archerIsAwake, prisonerIsAwake);
// => true

3. تحقّق مما إذا كان فعل "إشارة إلى السجين" ممكنًا

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

const archerIsAwake = false;
const prisonerIsAwake = true;
canSignalPrisoner(archerIsAwake, prisonerIsAwake);
// => true

4. تحقّق مما إذا كان فعل "تحرير السجين" ممكنًا

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

const knightIsAwake = false;
const archerIsAwake = true;
const prisonerIsAwake = false;
const petDogIsPresent = false;
canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent);
// => false
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
JavaScript Exercism

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

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