数一数围棋棋盘上的得分点。
在围棋(又称 baduk、igo、cờ vây 和 wéiqí)中,用你的棋子把空的交叉点完全围住就能得分。被一名玩家围住的交叉点称为他的地盘。
计算每名玩家的地盘。可以假设,任何被困在对方地盘里的棋子都已经从棋盘上拿掉了。
确定包含指定坐标的那块地盘。
一次可以围住多个空的交叉点,而且判断是否围住时,只有横向和纵向相邻的交叉点才算数。下图中,起作用的棋子标为“O”,不起作用的棋子标为“I”(忽略不计)。空白处表示空的交叉点。
+----+
|IOOI|
|O O|
|O OI|
|IOI |
+----+
更准确地说,如果一个空的交叉点的所有相邻点要么是该玩家的棋子,要么是属于该玩家地盘的空的交叉点,那么这个交叉点就属于该玩家的地盘。
想了解更多,可以查看 维基百科 或 Sensei's Library。
要完成这个练习,你需要实现以下函数:
territories返回每个地盘内各点的坐标(从 1 开始,左上角是 (1,1)),以及谁“拥有”这个地盘。
territoriesFor返回包含该坐标的地盘,以及该地盘的拥有者。如果该坐标指向的不是空位,就返回Nothing。
如果一个玩家的棋子是唯一与该地盘相邻的棋子,这个地盘就归该玩家所有。
类型签名已经给你准备好了,但函数需要由你自己定义。