مسیرها
/
Java
Java
/
تمرین‌ها
/
نفوذ آنالین
نفوذ آنالین

نفوذ آنالین

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

مقدمه

مقادیر منطقی

«منطقی» در Java با نوع boolean نمایش داده می‌شود و مقدارش می‌تواند true یا false باشد.

Java از سه عملگر منطقی پشتیبانی می‌کند:

  • ! (NOT): مقدار منطقی را نقیض می‌کند
  • && (AND): دو مقدار منطقی می‌گیرد و اگر هر دو true باشند true برمی‌گرداند
  • || (OR): اگر یکی از آن دو مقدار منطقی true باشد، true برمی‌گرداند

مثال‌ها

!true // => false
!false // => true
true && false // => false
true && true // => true
false || false // => false
false || true // => true

دستورالعمل‌ها

در این تمرین، منطق مأموریت را برای یک بازی نقش‌آفرینی جدید که دوستتان در حال ساخت آن است پیاده‌سازی می‌کنید. شخصیت اصلی بازی Annalyn است، دختری شجاع با یک سگ خانگی سرسخت و وفادار. متأسفانه، فاجعه رخ می‌دهد: بهترین دوستش هنگام جست‌وجوی توت در جنگل دزدیده شد. Annalyn تلاش می‌کند دوستش را پیدا کند و نجات دهد و در صورت تمایل سگش را هم در این مأموریت همراه ببرد.

Annalyn پس از مدتی دنبال کردن رد، اردوگاهی را پیدا می‌کند که دوستش در آن زندانی است. معلوم می‌شود دو آدم‌ربا وجود دارد: یک شوالیه‌ی قدرتمند و یک کماندار حیله‌گر.

Annalyn پس از یافتن آدم‌رباها، در نظر می‌گیرد که کدام‌یک از اقدامات زیر را می‌تواند انجام دهد:

  • حمله‌ی سریع: اگر شوالیه خواب باشد می‌توان حمله‌ی سریع انجام داد، چون پوشیدن زره‌اش وقت می‌گیرد و او را آسیب‌پذیر می‌کند.
  • جاسوسی: اگر دست‌کم یکی از آن‌ها بیدار باشد می‌توان از گروه جاسوسی کرد. در غیر این صورت، جاسوسی اتلاف وقت است.
  • علامت دادن به زندانی: اگر زندانی بیدار و کماندار خواب باشد، می‌توان با صداهای پرنده به زندانی علامت داد. کماندارها در علامت‌دهی با پرنده آموزش دیده‌اند و اگر بیدار باشند می‌توانند پیام را رهگیری کنند.
  • آزاد کردن زندانی: Annalyn می‌تواند تلاش کند تا مخفیانه به اردوگاه نفوذ کند و زندانی را آزاد کند. این کار پرخطر است و تنها به یکی از دو روش می‌تواند موفق شود:
    • اگر Annalyn سگ خانگی‌اش را همراه داشته باشد، در صورتی که کماندار خواب باشد می‌تواند زندانی را نجات دهد. شوالیه از سگ می‌ترسد و کماندار فرصت نمی‌کند آماده شود، پیش از آن‌که Annalyn و زندانی فرار کنند.
    • اگر Annalyn سگ خانگی‌اش را همراه نداشته باشد، آن‌وقت او و زندانی باید بسیار مخفی‌کارانه عمل کنند! Annalyn می‌تواند زندانی را آزاد کند اگر زندانی بیدار باشد و هم شوالیه و هم کماندار خواب باشند. اما اگر زندانی خواب باشد، نمی‌توان او را نجات داد، چون ظاهر ناگهانی Annalyn او را می‌ترساند و شوالیه و کماندار را بیدار می‌کند.

شما چهار کار دارید: پیاده‌سازی منطقی که بر اساس وضعیت سه شخصیت در جنگل و اینکه سگ خانگی Annalyn حضور دارد یا نه، مشخص کند آیا اقدامات بالا در دسترس هستند یا نه.

1. بررسی کنید آیا می‌توان حمله‌ی سریع انجام داد

متد (static) AnnalynsInfiltration.canFastAttack() را پیاده‌سازی کنید که یک مقدار «منطقی» می‌گیرد که نشان می‌دهد آیا شوالیه بیدار است. این متد اگر بر اساس وضعیت شوالیه بتوان حمله‌ی سریع انجام داد، true برمی‌گرداند. در غیر این صورت، false برمی‌گرداند:

boolean knightIsAwake = true;
AnnalynsInfiltration.canFastAttack(knightIsAwake);
// => false

2. بررسی کنید آیا می‌توان از گروه جاسوسی کرد

متد (static) AnnalynsInfiltration.canSpy() را پیاده‌سازی کنید که سه مقدار منطقی می‌گیرد که به‌ترتیب نشان می‌دهند آیا شوالیه، کماندار و زندانی بیدار هستند. این متد اگر بر اساس وضعیت سه شخصیت بتوان از گروه جاسوسی کرد، true برمی‌گرداند. در غیر این صورت، false برمی‌گرداند:

boolean knightIsAwake = false;
boolean archerIsAwake = true;
boolean prisonerIsAwake = false;
AnnalynsInfiltration.canSpy(knightIsAwake, archerIsAwake, prisonerIsAwake);
// => true

3. بررسی کنید آیا می‌توان به زندانی علامت داد

متد (static) AnnalynsInfiltration.canSignalPrisoner() را پیاده‌سازی کنید که دو مقدار منطقی می‌گیرد که به‌ترتیب نشان می‌دهند آیا کماندار و زندانی بیدار هستند. این متد اگر بر اساس وضعیت دو شخصیت بتوان به زندانی علامت داد، true برمی‌گرداند. در غیر این صورت، false برمی‌گرداند:

boolean archerIsAwake = false;
boolean prisonerIsAwake = true;
AnnalynsInfiltration.canSignalPrisoner(archerIsAwake, prisonerIsAwake);
// => true

4. بررسی کنید آیا می‌توان زندانی را آزاد کرد

متد (static) AnnalynsInfiltration.canFreePrisoner() را پیاده‌سازی کنید که چهار مقدار منطقی می‌گیرد. سه پارامتر اول به‌ترتیب نشان می‌دهند آیا شوالیه، کماندار و زندانی بیدار هستند. پارامتر آخر نشان می‌دهد آیا سگ خانگی Annalyn حضور دارد. این متد اگر بر اساس وضعیت سه شخصیت و حضور سگ خانگی Annalyn بتوان زندانی را آزاد کرد، true برمی‌گرداند. در غیر این صورت، false برمی‌گرداند:

boolean knightIsAwake = false;
boolean archerIsAwake = true;
boolean prisonerIsAwake = false;
boolean petDogIsPresent = false;
AnnalynsInfiltration.canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent);
// => false
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Java Exercism

آماده‌اید نفوذ آنالین را شروع کنید؟

در Exercism ثبت‌نام کنید تا Java را همراه با 26 مفهوم158 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.