Conte os pontos pontuados em um tabuleiro de go.
No jogo de go (também conhecido como baduk, igo, cờ vây e wéiqí), ganham-se pontos ao cercar completamente interseções vazias com suas pedras. As interseções cercadas de um jogador são conhecidas como seu território.
Calcule o território de cada jogador. Você pode assumir que quaisquer pedras que tenham ficado presas em território inimigo já foram retiradas do tabuleiro.
Determine o território que inclui uma coordenada especificada.
Várias interseções vazias podem ser cercadas de uma só vez e, para cercar, contam apenas os vizinhos horizontais e verticais. No diagrama a seguir, as pedras que importam estão marcadas com "O" e as que não importam estão marcadas com "I" (ignoradas). 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, veja a Wikipedia ou a Sensei's Library.
Para completar este exercício, você precisa implementar as seguintes funções:
territories retorna as coordenadas (a contagem começa em 1, o canto superior esquerdo é (1,1)) dos pontos em cada território, junto com quem "possui" o território.
territoriesFor retorna o território que contém a coordenada, junto com o dono do território. Se a coordenada não aponta para um local vazio, retorna Nothing.
Um território pertence a um dos jogadores se as pedras desse jogador forem as únicas pedras adjacentes ao território.
As assinaturas de tipo já estão prontas, mas cabe a você definir as funções.
Crie sua conta no Exercism para aprender e dominar Haskell com 107 exercícios e mentoria humana de verdade, tudo de graça.