المسارات
/
F#
F#
/
التمارين
/
تسلّل أنالين
تسلّل أنالين

تسلّل أنالين

تمرين تعلّمي

مقدمة

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

تُمثَّل القيم المنطقية في F# بالنوع bool، الذي يمكن أن تكون قيمه إما true أو false.

تدعم F# ثلاثة عوامل منطقية: not (NOT)، و&& (AND)، و|| (OR).

التعليمات

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

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

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

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

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

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

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

let knightIsAwake = true
canFastAttack(knightIsAwake)
// => false

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

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

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

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

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

let archerIsAwake = false
let prisonerIsAwake = true
canSignalPrisoner(archerIsAwake, prisonerIsAwake)
// => true

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

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

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

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

سجّل في Exercism لتتعلّم وتتقن F# عبر 18 مفهومًا148 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.