Conta os pontos marcados num tabuleiro de Go.
No jogo de Go (também conhecido como baduk, igo, cờ vây e wéiqí), ganham-se pontos ao rodear completamente interseções vazias com as tuas pedras. As interseções rodeadas de um jogador são conhecidas como o seu território.
Calcula o território de cada jogador. Podes assumir que quaisquer pedras que tenham ficado presas em território inimigo já foram retiradas do tabuleiro.
Determina o território que inclui uma coordenada especificada.
É possível rodear várias interseções vazias ao mesmo tempo e, para rodear, só contam os vizinhos horizontais e verticais. No diagrama seguinte, as pedras que importam estão marcadas com "O" e as que não importam estão marcadas com "I" (ignoradas). Os espaços vazios representam interseções vazias.
+----+
|IOOI|
|O O|
|O OI|
|IOI |
+----+
Para ser mais preciso, uma interseção vazia faz parte do território de um jogador se todos os seus vizinhos forem pedras desse jogador ou interseções vazias que fazem parte do território desse jogador.
Para mais informações, consulta a Wikipedia ou a Sensei's Library.
Para completares este exercício, precisas de implementar as seguintes funções:
territories devolve as coordenadas (a começar em 1; o canto superior esquerdo é (1,1)) dos pontos de cada território, juntamente com quem é o «dono» do território.
territoriesFor devolve o território que contém a coordenada, juntamente com o dono do território. Se a coordenada não apontar para um local vazio, devolve Nothing.
Um território pertence a um dos jogadores se as pedras desse jogador forem as únicas pedras adjacentes ao território.
Vais encontrar as assinaturas de tipo já no sítio, mas cabe-te a ti definir as funções.
Inscreve-te no Exercism para aprenderes e dominares Haskell com 107 exercícios, e mentoria humana real, tudo grátis.