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

囲碁の得点計算

中級

説明

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

囲碁(baduk、igo、cờ vây、wéiqíとも呼ばれます)では、空点を自分の石で完全に囲むと得点が得られます。プレイヤーが囲んだ交点は、そのプレイヤーの陣地と呼ばれます。

各プレイヤーの陣地を計算してください。敵の陣地に取り残された石は、すでに盤上から取り除かれているとみなしてかまいません。

指定された座標を含む陣地を求めてください。

複数の空点が同時に囲まれることもあります。囲むとみなされるのは、上下左右に隣り合う点だけです。次の図では、関係する石を「O」、関係しない石を「I」(ignored)で示しています。空白は空点を表します。

+----+
|IOOI|
|O  O|
|O OI|
|IOI |
+----+

より正確には、こう言えます。ある空点に隣り合う点がすべて、そのプレイヤーの石であるか、そのプレイヤーの陣地に含まれる空点であるなら、その空点もそのプレイヤーの陣地の一部です。

詳しくは、WikipediaやSensei's Libraryをご覧ください。

入力形式

ゲーム盤を表すboard仮引数は、文字列の配列という形式です。

['  B  ', ' B B ', 'B W B', ' W W ', '  W  '];

文字列の各文字が、1つのマスを表します。 マスに入る有効な値は次のとおりです。

  • は、空のマスに対応する空白文字です
  • 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 2人のプレイヤーのどちらも所有していない陣地を表す座標の配列
{
    territoryBlack: [
        [0, 0],
        [0, 1],
    ],
    territoryWhite: [
        [3, 0],
        [3, 1],
    ],
    territoryNone: [],
}
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
JavaScript Exercism

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

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