गो के खेल में (जिसे 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 लौटाता है।
अगर किसी टेरिटरी से सटे हुए सारे पत्थर किसी एक ही खिलाड़ी के हों, तो वह टेरिटरी उसी खिलाड़ी की होती है।
टाइप सिग्नेचर तो पहले से मौजूद हैं, लेकिन फंक्शन आपको खुद बनाने हैं।
Exercism पर साइन अप कीजिए और Haskell को 107 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।