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

نفوذ آنالین

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

مقدمه

مقادیر «منطقی» در Julia

مقادیر «درست» یا «غلط» با نوع Bool نمایش داده می‌شوند. این نوع فقط دو مقدار دارد: true و false.

julia> true
true

julia> false
false

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

سه عملگر منطقی در Julia وجود دارد.

&& عملگر منطقی «و» است. اگر عبارات در هر دو طرف && مقدار true داشته باشند، نتیجه true خواهد بود.

julia> true && true
true

julia> true && false
false

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

julia> true || true
true

julia> false || true
true

! عملگر منطقی «نقیض» است. مقادیر true و false را جابه‌جا می‌کند.

julia> !true
false

julia> !false
true

برای عبارات طولانی‌تر و پیچیده‌تر، بهتر است برای روشن شدن منظورتان از پرانتز استفاده کنید.

julia> (true || false) && (false && true)
false

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

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

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

برای ادامه‌ی بازی چند گزینه به بازیکن نشان داده می‌شود. برای هر یک از این چهار گزینه‌ی ممکن باید تابعی بنویسید که به بازی بگوید آن گزینه را نشان بدهد یا نه.

1. بررسی کنید که آیا گزینه‌ی «حمله‌ی سریع» باید نشان داده شود

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

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

julia> knight_awake = true

julia> can_do_fast_attack(knight_awake)
false

2. بررسی کنید که آیا گزینه‌ی «جاسوسی» باید نشان داده شود

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

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

# Output suppressed from the next 3 lines
julia> knight_awake = false
julia> archer_awake = true
julia> prisoner_awake = false

julia> can_spy(knight_awake, archer_awake, prisoner_awake)
true

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

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

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

julia> archer_awake = false
julia> prisoner_awake = true

julia> can_signal_prisoner(archer_awake, prisoner_awake)
true

4. بررسی کنید که آیا گزینه‌ی «آزاد کردن زندانی» باید نشان داده شود

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

  • اگر آنالین سگ خانگی‌اش را همراه داشته باشد، در صورتی می‌تواند زندانی را نجات دهد که کماندار خواب باشد. شوالیه از سگ می‌ترسد و کماندار هم فرصت نمی‌کند پیش از فرار آنالین و دوستش آماده شود.

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

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

julia> knight_awake = false
julia> archer_awake = true
julia> prisoner_awake = false
julia> dog_present = false

julia> can_free_prisoner(knight_awake, archer_awake, prisoner_awake, dog_present)
false
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Julia Exercism

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

در Exercism ثبت‌نام کنید تا Julia را همراه با 35 مفهوم128 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.