碁盤上の得点を数えましょう。
囲碁(baduk、igo、cờ vây、wéiqíとも呼ばれます)では、空点を自分の石で完全に囲むと得点が得られます。プレイヤーが囲んだ交点は、そのプレイヤーの陣地と呼ばれます。
各プレイヤーの陣地を計算してください。敵の陣地に取り残された石は、すでに盤上から取り除かれているとみなしてかまいません。
指定された座標を含む陣地を求めてください。
複数の空点が同時に囲まれることもあります。囲むとみなされるのは、上下左右に隣り合う点だけです。次の図では、関係する石を「O」、関係しない石を「I」(ignored)で示しています。空白は空点を表します。
+----+
|IOOI|
|O O|
|O OI|
|IOI |
+----+
より正確には、こう言えます。ある空点に隣り合う点がすべて、そのプレイヤーの石であるか、そのプレイヤーの陣地に含まれる空点であるなら、その空点もそのプレイヤーの陣地の一部です。
詳しくは、WikipediaやSensei's Libraryをご覧ください。
この演習を完了するには、次の関数を実装する必要があります。
territoriesは、それぞれの陣地にある点の座標(1から始まり、左上が(1,1))と、その陣地を「所有」しているプレイヤーを返します。
territoriesForは、その座標を含む陣地と、その陣地の所有者を返します。座標が空の場所を指していない場合は、Nothingを返します。
あるプレイヤーの石だけがその陣地に隣接しているとき、その陣地はそのプレイヤーが所有していることになります。
型シグネチャはすでに用意されていますが、関数の定義は自分で書く必要があります。