轨道
/
JavaScript
JavaScript
/
练习
/
围棋计数
围棋计数

围棋计数

中等

说明

数一数围棋棋盘上的得分点。

在围棋(又称 baduk、igo、cờ vây 和 wéiqí)中,用你的棋子把空的交叉点完全围住就能得分。被一名玩家围住的交叉点称为他的地盘。

计算每名玩家的地盘。可以假设,任何被困在对方地盘里的棋子都已经从棋盘上拿掉了。

确定包含指定坐标的那块地盘。

一次可以围住多个空的交叉点,而且判断是否围住时,只有横向和纵向相邻的交叉点才算数。下图中,起作用的棋子标为“O”,不起作用的棋子标为“I”(忽略不计)。空白处表示空的交叉点。

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

更准确地说,如果一个空的交叉点的所有相邻点要么是该玩家的棋子,要么是属于该玩家地盘的空的交叉点,那么这个交叉点就属于该玩家的地盘。

想了解更多,可以查看 维基百科 或 Sensei's Library。

输入格式

board形参代表棋盘,格式为字符串数组。

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

字符串中的每个字符代表一个格子。 格子的有效取值有:

  • 代表空格子的空白字符
  • B 黑方拥有的格子
  • W 白方拥有的格子

输出格式

getTerritory函数应返回一个包含 2 个属性的对象:

  • owner:领地的所有者(NONE、BLACK 或 WHITE)
  • territory:由坐标组成的数组,表示领地中的每个格子。
{
    owner: 'BLACK',
    territory: [
        [0, 0],
        [0, 1],
        [1, 0],
    ],
}

getTerritories函数应返回一个包含 3 个属性的对象:

  • territoryBlack:由坐标组成的数组,表示 BLACK 方拥有的领地
  • territoryWhite:由坐标组成的数组,表示 WHITE 方拥有的领地
  • territoryNone:由坐标组成的数组,表示双方玩家都不拥有的领地
{
    territoryBlack: [
        [0, 0],
        [0, 1],
    ],
    territoryWhite: [
        [3, 0],
        [3, 1],
    ],
    territoryNone: [],
}
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
JavaScript Exercism

准备好开始 围棋计数 了吗?

注册 Exercism,借助 37 个概念159 个练习 和真人导师指导,学习并掌握 JavaScript,全部免费。