نفوذ آنالین

نفوذ آنالین

تمرین یادگیری

مقدمه

«مقدار منطقی» یکی از دو مقدار 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 حاضر است یا نه. این تابع اگر اقدام «آزاد کردن زندانی» بر اساس وضعیت شخصیت‌ها و حضور سگ خانگی Annalyn در دسترس باشد، true را برمی‌گرداند. در غیر این صورت، 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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.