Contagem de Go

Contagem de Go

Médio

Instruções

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.

Formato de entrada

O parâmetro board, que representa o tabuleiro de jogo, está no formato de um array de strings.

['  B  ', ' B B ', 'B W B', ' W W ', '  W  '];

Cada caráter de uma string representa uma célula. Os valores válidos para uma célula são:

  • um espaço em branco que corresponde a uma célula vazia
  • B uma célula que pertence ao jogador preto
  • W uma célula que pertence ao jogador branco

Formatos de saída

A função getTerritory deve devolver um objeto com 2 propriedades:

  • owner O dono do território (NONE, BLACK ou WHITE)
  • territory Um array de coordenadas que representa cada célula do território.
{
    owner: 'BLACK',
    territory: [
        [0, 0],
        [0, 1],
        [1, 0],
    ],
}

A função getTerritories deve devolver um objeto com 3 propriedades:

  • territoryBlack Um array de coordenadas que representa os territórios que pertencem ao jogador BLACK
  • territoryWhite Um array de coordenadas que representa os territórios que pertencem ao jogador WHITE
  • territoryNone Um array de coordenadas que representa os territórios que não pertencem a nenhum dos dois jogadores
{
    territoryBlack: [
        [0, 0],
        [0, 1],
    ],
    territoryWhite: [
        [3, 0],
        [3, 1],
    ],
    territoryNone: [],
}
Editar via GitHub A ligação abre numa nova janela ou separador
JavaScript Exercism

Estás pronto para começar Contagem de Go?

Inscreve-te no Exercism para aprenderes e dominares JavaScript com 37 conceitos159 exercícios, e mentoria humana real, tudo grátis.