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

نفوذ آنالین

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

مقدمه

منطقی

نوع bool (کوتاه‌شده‌ی «منطقی»، یا همان «بولی») فقط دو مقدار دارد: true و false. مقدارهای تحت‌اللفظی true و false در کد به بزرگی و کوچکی حروف حساس نیستند.

<?php

$value_is_true = true;
$value_is_false = false;

از مقدارهای منطقی اغلب در عبارت‌های منطقی، به‌عنوان نتیجه‌ی یک عملگر، استفاده می‌شود و بعد در ساختارهای کنترلی به کار می‌روند.

عملگرهای منطقی

چندین عملگر منطقی وجود دارد:

  • !$a: اگر $a برابر true نباشد، true را برمی‌گرداند
  • $a && $b: اگر $a و $b هر دو true باشند، true را برمی‌گرداند
  • $a || $b: اگر $a یا $b برابر true باشد، true را برمی‌گرداند
Caution

عملگرهای and و or هم وجود دارند و به ترتیب مکمل && و || هستند. رفتارشان با && و || یکسان نیست و ممکن است نتیجه‌های غیرمنتظره‌ای تولید کنند و به همین دلیل استفاده از آن‌ها توصیه نمی‌شود.

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

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

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

آنالین پس از یافتن آدم‌رباها بررسی می‌کند که کدام‌یک از کارهای زیر را می‌تواند انجام دهد:

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

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

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

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

<?php
$is_knight_awake = true;

$infiltration = new AnnalynsInfiltration();
$infiltration->canFastAttack($is_knight_awake);
// => false

2. بررسی کنید که آیا کار «جاسوسی» ممکن است

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

<?php
$is_knight_awake = false;
$is_archer_awake = true;
$is_prisoner_awake = false;

$infiltration = new AnnalynsInfiltration();
$infiltration->canSpy($is_knight_awake, $is_archer_awake, $is_prisoner_awake);
// => true

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

تابعی به اسم canSignal پیاده‌سازی کنید که دو مقدار منطقی می‌گیرد که به ترتیب نشان می‌دهند کماندار و زندانی بیدار هستند یا نه. تابع اگر کار «علامت دادن به زندانی» بر اساس وضعیت شخصیت‌ها در دسترس باشد، true برمی‌گرداند. در غیر این صورت، false را برمی‌گرداند:

<?php
$is_archer_awake = false;
$is_prisoner_awake = true;

$infiltration = new AnnalynsInfiltration();
$infiltration->canSignal($is_archer_awake, $is_prisoner_awake);
// => true

4. بررسی کنید که آیا کار «آزاد کردن زندانی» ممکن است

تابعی به اسم canLiberate پیاده‌سازی کنید که چهار مقدار منطقی می‌گیرد. سه پارامتر اول به ترتیب نشان می‌دهند شوالیه، کماندار و زندانی بیدار هستند یا نه. پارامتر آخر نشان می‌دهد سگ آنالین حضور دارد یا نه. تابع اگر کار «آزاد کردن زندانی» بر اساس وضعیت شخصیت‌ها و حضور سگ آنالین در دسترس باشد، true برمی‌گرداند. در غیر این صورت، false را برمی‌گرداند:

<?php
$is_knight_awake = false;
$is_archer_awake = true;
$is_prisoner_awake = false;
$is_dog_present = false;

$infiltration = new AnnalynsInfiltration();
$infiltration->canLiberate(
    $is_knight_awake,
    $is_archer_awake,
    $is_prisoner_awake,
    $is_dog_present
);
// => false
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
PHP Exercism

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

در Exercism ثبت‌نام کنید تا PHP را همراه با 11 مفهوم122 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.