مسیرها
/
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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.