トラック
/
Haskell
Haskell
/
演習
/
囲碁の得点計算
囲碁の得点計算

囲碁の得点計算

上級

説明

碁盤上の得点を数えましょう。

囲碁(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を返します。

あるプレイヤーの石だけがその陣地に隣接しているとき、その陣地はそのプレイヤーが所有していることになります。

型シグネチャはすでに用意されていますが、関数の定義は自分で書く必要があります。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Haskell Exercism

囲碁の得点計算を始める準備はできましたか?

Exercismに登録すれば、107個の演習、そして本物の人間によるメンタリングとともに、Haskellを学んでマスターできます。すべて無料です。