امتیازهای ثبتشده روی یک صفحهی گو را بشمارید.
در بازی گو (که با نامهای baduk، igo، cờ vây و wéiqí هم شناخته میشود) امتیازها با محاصرهی کامل تقاطعهای خالی بهوسیلهی سنگهای خودتان به دست میآیند. به تقاطعهای محاصرهشدهی یک بازیکن، قلمروی او میگویند.
قلمروی هر بازیکن را محاسبه کنید. میتوانید فرض کنید که هر سنگی که در قلمروی حریف گرفتار شده باشد، پیشتر از صفحه برداشته شده است.
قلمرویی را تعیین کنید که مختصات مشخصی را شامل میشود.
ممکن است چندین تقاطع خالی همزمان محاصره شوند و برای محاصره، فقط همسایههای افقی و عمودی به حساب میآیند. در نمودار زیر، سنگهایی که اهمیت دارند با «O» و سنگهایی که ندارند با «I» (نادیدهگرفتهشده) مشخص شدهاند. جاهای خالی نمایندهی تقاطعهای خالی هستند.
+----+
|IOOI|
|O O|
|O OI|
|IOI |
+----+
به بیان دقیقتر، یک تقاطع خالی بخشی از قلمروی یک بازیکن است اگر همهی همسایههایش یا سنگهای همان بازیکن باشند یا تقاطعهای خالیای که بخشی از قلمروی همان بازیکناند.
برای اطلاعات بیشتر، ویکیپدیا یا Sensei's Library را ببینید.
گاهی لازم است یک استثنا ایجاد کنید. وقتی این کار را میکنید، همیشه باید یک پیام خطای معنادار هم بگنجانید تا نشان دهید منبع خطا چیست. این کار کد شما را خواناتر میکند و به debug کردن کمک قابلتوجهی میکند. در موقعیتهایی که میدانید منبع خطا از یک نوع خاص است، میتوانید یکی از انواع خطای داخلی را ایجاد کنید، اما همچنان باید پیامی معنادار را هم بگنجانید.
این تمرین بهطور خاص از شما میخواهد که با استفاده از دستور raise هنگام دریافت مختصات نامعتبر، یک ValueError را «پرتاب» کنید. آزمونها تنها در صورتی قبول میشوند که هم exception را raise کنید و هم پیامی همراه آن بگنجانید.
برای اینکه یک ValueError همراه با پیام ایجاد کنید، پیام را بهصورت آرگومان برای نوع exception بنویسید:
# when the coordinates for the piece are invalid
raise ValueError('Invalid coordinate')