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

تسلّل أنالين

تمرين تعلّمي

مقدمة

تُمثَّل القيم المنطقية في Cairo بالنوع المنطقي المعرَّف مسبقًا bool، الذي يمكن أن تأخذ قيمه إما true أو false.

let speeding = true;   // Boolean variable 'speeding' set to 'true'
let has_error = false; // Boolean variable 'has_error' set to 'false' 

يدعم Cairo ثلاثة عوامل منطقية يمكنها تقييم التعبيرات وصولًا إلى قيم منطقية، فتُرجع إما true أو false.

العامل ما معناه
&& (و) يكون صحيحًا إذا كانت كلتا القضيتين صحيحتين.
|| (أو) يكون صحيحًا إذا كانت قضية واحدة على الأقل صحيحة.
! (لا) يكون صحيحًا فقط إذا كانت القضية خاطئة.

التعليمات

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

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

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

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

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

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

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

let knight_awake = true;
can_fast_attack(knight_awake); // false

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

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

let knight_awake = false;
let archer_awake = true;
let prisoner_awake = false;
can_spy(knight_awake, archer_awake, prisoner_awake); // true

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

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

let archer_awake = false;
let prisoner_awake = true;
can_signal_prisoner(archer_awake, prisoner_awake); // true

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

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

let knight_awake = false;
let archer_awake = true;
let prisoner_awake = false;
let dog_present = false;
can_free_prisoner(knight_awake, archer_awake, prisoner_awake, dog_present); // false
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Cairo Exercism

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

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