مسیرها
/
Haskell
Haskell
/
تمرین‌ها
/
شمارش در بازی گو
شمارش در بازی گو

شمارش در بازی گو

دشوار

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

امتیازهای ثبت‌شده روی یک صفحه‌ی گو را بشمارید.

در بازی گو (که با نام‌های baduk، igo، cờ vây و wéiqí هم شناخته می‌شود) امتیازها با محاصره‌ی کامل تقاطع‌های خالی به‌وسیله‌ی سنگ‌های خودتان به دست می‌آیند. به تقاطع‌های محاصره‌شده‌ی یک بازیکن، قلمروی او می‌گویند.

قلمروی هر بازیکن را محاسبه کنید. می‌توانید فرض کنید که هر سنگی که در قلمروی حریف گرفتار شده باشد، پیش‌تر از صفحه برداشته شده است.

قلمرویی را تعیین کنید که مختصات مشخصی را شامل می‌شود.

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

+----+
|IOOI|
|O  O|
|O OI|
|IOI |
+----+

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

برای اطلاعات بیشتر، ویکی‌پدیا یا Sensei's Library را ببینید.

راهنمایی‌ها

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

  • territories مختصات نقاط هر قلمرو را برمی‌گرداند (با مبنای ۱، یعنی بالا-چپ همان (۱، ۱) است) به همراه این که چه کسی «مالک» آن قلمرو است.

  • territoriesFor قلمرویی را که شامل آن مختصات است، به همراه مالک آن قلمرو برمی‌گرداند. اگر مختصات به یک مکان خالی اشاره نکند، Nothing را برمی‌گرداند.

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

امضاهای نوع از پیش در جای خود قرار دارند، اما تعریف توابع بر عهده‌ی خودتان است.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Haskell Exercism

آماده‌اید شمارش در بازی گو را شروع کنید؟

در Exercism ثبت‌نام کنید تا Haskell را همراه با 107 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.