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

تسلّل أنالين

تمرين تعلّمي

مقدمة

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

var closed bool    // boolean variable 'closed' implicitly initialized with 'false'
speeding := true   // boolean variable 'speeding' initialized with 'true'
hasError := false  // boolean variable 'hasError' initialized with 'false' 

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

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

التعليمات

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

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

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

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

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

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

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

var knightIsAwake = true
fmt.Println(CanFastAttack(knightIsAwake))
// Output: false

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

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

var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
fmt.Println(CanSpy(knightIsAwake, archerIsAwake, prisonerIsAwake))
// Output: true

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

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

var archerIsAwake = false
var prisonerIsAwake = true
fmt.Println(CanSignalPrisoner(archerIsAwake, prisonerIsAwake))
// Output: true

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

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

var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
var petDogIsPresent = false
fmt.Println(CanFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent))
// Output: false
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Go Exercism

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

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