圍棋計數

圍棋計數

中等

說明

計算圍棋棋盤上的得分。

在圍棋(也稱 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,全部免費。