عدّ نقاط Go

عدّ نقاط Go

صعب

التعليمات

احسب النقاط المحرزة على رقعة غو.

في لعبة غو (المعروفة أيضًا باسم baduk وigo وcờ vây وwéiqí) تُكتسب النقاط بتطويق التقاطعات الفارغة بالكامل بحجارتك. تُعرف التقاطعات المطوَّقة للاعب باسم أرضه.

احسب أرض كل لاعب. يمكنك أن تفترض أن أي حجارة علقت داخل أرض الخصم قد أُزيلت بالفعل من الرقعة.

حدّد الأرض التي تشمل إحداثيًا محدّدًا.

قد تُطوَّق عدة تقاطعات فارغة دفعة واحدة، وفي التطويق تُحتسب الجوارات الأفقية والرأسية فقط. في المخطط التالي، الحجارة المهمة مُعلَّمة بـ "O" والحجارة غير المهمة مُعلَّمة بـ "I" (أي مُتجاهَلة). تمثّل المسافات الفارغة تقاطعات فارغة.

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

ولمزيد من الدقة، يكون التقاطع الفارغ جزءًا من أرض اللاعب إذا كانت جميع جواراته إما حجارة لذلك اللاعب وإما تقاطعات فارغة تشكّل جزءًا من أرض ذلك اللاعب.

لمزيد من المعلومات، انظر Wikipedia أو Sensei's Library.

تلميحات

لإكمال هذا التمرين، عليك تنفيذ الدوال التالية:

  • territories تُرجع إحداثيات النقاط في كل منطقة (تبدأ من 1، والنقطة العلوية اليسرى هي (1,1)) مع بيان من "يملك" المنطقة.

  • territoriesFor تُرجع المنطقة التي تحتوي على الإحداثي مع مالك المنطقة. وإذا لم يُشِر الإحداثي إلى موقع فارغ، فستُرجع Nothing.

تكون المنطقة مملوكة لأحد اللاعبين إذا كانت أحجار ذلك اللاعب هي الأحجار الوحيدة المجاورة للمنطقة.

ستجد توقيعات الأنواع موجودة بالفعل، لكن الأمر متروك لك لتعريف الدوال.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Haskell Exercism

مستعد لبدء عدّ نقاط Go؟

سجّل في Exercism لتتعلّم وتتقن Haskell عبر 107 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.