計算圍棋棋盤上的得分。
在圍棋(也稱 baduk、igo、cờ vây 和 wéiqí)中,用你的棋子把空的交叉點完全包圍起來就能得分。一位玩家所包圍的交叉點稱為他的領地。
計算每位玩家的領地。 你可以假設,任何滯留在對方領地中的棋子都已經從棋盤上移除了。
判斷包含指定座標的領地。
一次可以包圍多個空的交叉點,而且包圍時只有水平和垂直方向的相鄰點才算數。 在下圖中,重要的棋子標為「O」,不重要的棋子標為「I」(忽略)。空白處代表空的交叉點。
+----+
|IOOI|
|O O|
|O OI|
|IOI |
+----+
更精確地說,一個空的交叉點屬於某位玩家的領地,若它的所有相鄰點都是該玩家的棋子,或是同樣屬於該玩家領地的空交叉點。
更多資訊請見 維基百科 或 Sensei's Library。
要完成這個練習,你需要實作下列函式:
territories 會回傳每個領地中各點的座標(從 1 開始,左上角是 (1,1)),以及該領地是由誰「擁有」。
territoriesFor 會回傳包含該座標的領地,以及該領地的擁有者。如果該座標不是指向空白位置,就回傳 Nothing。
如果某位玩家的棋子是唯一與某個領地相鄰的棋子,這個領地就屬於該玩家。
型別簽名已經幫你準備好了,但這些函式要由你自己定義喔。