مین‌یاب

مین‌یاب

متوسط

مقدمه

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

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

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

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

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

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

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

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` برای ساده کردن بررسی محدوده‌ها، پایپ‌لاین‌های تابعی و استفاده از ماتریس‌های دوبعدی را بررسی می‌کنیم.