دشت گل

دشت گل

متوسط

مقدمه

Flower Field بازآفرینیِ مهربانانه‌ای از بازی محبوب Minesweeper است. هدف بازی این است که با کمک سرنخ‌های عددی، همه‌ی گل‌های باغ را پیدا کنید. این سرنخ‌ها نشان می‌دهند که چند گل به‌طور مستقیم (افقی، عمودی یا قطری) مجاور یک خانه قرار دارد. «Flower Field» در نسخه‌های منطقه‌ای Microsoft Windows در ایتالیا، آلمان، کره‌ی جنوبی، ژاپن و تایوان عرضه شد.

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

وظیفه‌ی شما این است که در یک باغ کامل‌شده‌ی «میدان گل»، تعداد گل‌ها را به خانه‌های خالی اضافه کنید. خود باغ یک صفحه‌ی مستطیلی است که از خانه‌هایی تشکیل شده که یا خالی‌اند (' ') یا یک گل دارند ('*').

برای هر خانه‌ی خالی، تعداد گل‌های مجاور آن را بشمارید (به‌صورت افقی، عمودی و قطری). اگر خانه‌ی خالی هیچ گل مجاوری ندارد، آن را خالی بگذارید. در غیر این صورت، آن را با تعداد گل‌های مجاور جایگزین کنید.

برای مثال، ممکن است صفحه‌ای ۵ × ۴ به این شکل به دستتان برسد (فضاهای خالی اینجا برای نمایش روی صفحه با نویسه‌ی '·' نشان داده شده‌اند):

·*·*·
··*··
··*··
·····

که کد شما باید آن را به این تبدیل کند:

1*3*1
13*31
·2*2·
·111·

پیام‌های استثنا

گاهی لازم است یک «استثنا» ایجاد کنید. وقتی این کار را می‌کنید، همیشه باید یک پیام خطای معنادار بگنجانید تا نشان دهید منبع خطا چیست. این کار code شما را خواناتر می‌کند و به debug کمک قابل توجهی می‌کند. در موقعیت‌هایی که می‌دانید منبع خطا از یک نوع مشخص است، می‌توانید یکی از انواع خطای داخلی را ایجاد کنید، اما باز هم باید پیامی معنادار بگنجانید.

این تمرین به‌طور خاص می‌خواهد که وقتی تابع board() ورودی نادرست دریافت می‌کند، با دستور raise یک ValueError را «پرتاب» کنید. tests فقط وقتی قبول می‌شوند که هم exception را raise کنید و هم پیامی همراه آن بگنجانید.

برای ایجاد یک ValueError همراه با پیام، پیام را به‌عنوان آرگومان نوع exception بنویسید:

# when the board receives malformed input
raise ValueError("The board is invalid with current input.")
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Python Exercism

آماده‌اید دشت گل را شروع کنید؟

در Exercism ثبت‌نام کنید تا Python را همراه با 17 مفهوم146 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.

بررسی عمیق دشت گل!

حلقه‌های For تودرتو، استفاده‌ی هوشمندانه از `min` و `max` برای ساده کردن بررسی محدوده‌ها، پایپ‌لاین‌های تابعی و استفاده از ماتریس‌های دوبعدی را بررسی می‌کنیم.