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

نفوذ آنالین

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

مقدمه

در Clojure، مقادیر منطقی با true یا false نمایش داده می‌شوند.

«توابع محمولی» (توابعی که یک مقدار منطقی برمی‌گردانند) معمولاً با علامت سؤال (?) پایان می‌یابند، اما این فقط یک قرارداد است.

کتابخانه‌ی اصلی شامل توابعی برای عملگرهای منطقی مانند not، and و or است.

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

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

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

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

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

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

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

تابع can-fast-attack? را پیاده‌سازی کنید که یک مقدار منطقی می‌گیرد و نشان می‌دهد آیا شوالیه بیدار است. این تابع اگر بر اساس وضعیت شوالیه بتوان حمله‌ی سریع انجام داد، true برمی‌گرداند. در غیر این صورت، false برمی‌گرداند:

(def knight-awake? true)

(can-fast-attack? knight-awake?)
;;=> false

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

تابع can-spy? را پیاده‌سازی کنید که سه مقدار منطقی می‌گیرد و به‌ترتیب نشان می‌دهد آیا شوالیه، کماندار و زندانی بیدار هستند. این تابع اگر بر اساس وضعیت سه شخصیت بتوان از گروه جاسوسی کرد، true برمی‌گرداند. در غیر این صورت، false برمی‌گرداند:

(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)

(can-spy? knight-awake? archer-awake? prisoner-awake?)
;;=> true

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

تابع can-signal-prisoner? را پیاده‌سازی کنید که دو مقدار منطقی می‌گیرد و به‌ترتیب نشان می‌دهد آیا کماندار و زندانی بیدار هستند. این تابع اگر بر اساس وضعیت آن دو شخصیت بتوان به زندانی علامت داد، true برمی‌گرداند. در غیر این صورت، false برمی‌گرداند:

(def archer-awake? false)
(def prisoner-awake? true)

(can-signal-prisoner? archer-awake? prisoner-awake?)
;;=> true

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

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

(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(def dog-present? false)

(can-free-prisoner? knight-awake? archer-awake? prisoner-awake? dog-present?)
;;=> false
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Clojure Exercism

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

در Exercism ثبت‌نام کنید تا Clojure را همراه با 12 مفهوم105 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.