マガジン

一手で8方向すべての石を返す配置は存在するか

遊びを見つける

執筆にClaudeを使用しています。

空きマスが残る青いオセロ盤を挟み、手を止めて考える二人を描いた版画風イラスト。
記事のテーマをもとに制作したAI生成イラスト。

オセロで石を置く前に、返る石のプレビューを見ながら「この手は何方向に効いているのか」を数える場面を考えてみます。縦に1本、斜めに1本という手はよくあります。では、上下左右と4つの斜め、合わせて8方向すべてに効く手は存在するのでしょうか。 先に結論を分けておきます。ルール上だけの話なら、存在します。石を自由に並べた盤面なら、下に示す配置で8方向すべてが返ります。一方、対局の流れの中でその配置にたどり着けるかは別の問題です。この記事ではそこを断定しません。代わりに、条件の絞り方と、自分で探すための手順を示します。 練習問題の形で、問1から順に解いていきます。

この記事の目次
  1. 問1 8方向に効く手は、どのマスなら可能か
  2. 問2 最少の石でその配置を作るには
  3. 問3 一手で返る石は最大何個になるか
  4. 問4 実際の対局で起こりうるかを確かめる
  5. 次の行動

問1 8方向に効く手は、どのマスなら可能か

オセロで石が返る条件は、置いたマスから一方向に「相手の石が1個以上連続し、その先に自分の石がある」ことです。8方向すべてで返すには、どの方向にも「相手の石1個+自分の石1個」の合計2マスが必要になります。

この条件から、置けるマスが絞れます。盤の端に近いマスでは、ある方向に2マス分の余地がありません。たとえば上から2行目のマスなら、上方向は相手の石1個で盤の端に着いてしまい、その先に自分の石を置けません。端から2マス以上離れていなければ、8方向は成立しません。

行を1〜8、列をa〜hとすると、残るのはc列〜f列、3行目〜6行目の4×4の範囲です。さらにd4・e4・d5・e5の中央4マスは、対局開始時から必ず石があるので「空きマスに置く手」にはなりえません。

つまり候補は、4×4の外周にあたる次の12マスです。

  • c3、f3、c6、f6(4隅)
  • d3、e3、d6、e6、c4、c5、f4、f5

どの12マスも、どこかの方向で自分の石が盤の端の行か列に必要になります。たとえばd3なら、上方向のd1、斜め上のb1とf1です。8方向に効く手は、必ず端の石を1個以上使います。

問2 最少の石でその配置を作るには

次は、石の数を最小にして8方向を成立させる問題です。d3に置く場合を考えます。各方向を「相手の石1個、自分の石1個」にすれば、石の数は最小になります。

d3を中心にすると、距離1の8マスが相手の石、距離2の8方向のマスが自分の石になります。自分の手番を白、相手を黒として、盤の左上5行×a〜f列を表にします。「手」がd3で、ここが空きマスです。

  • 1、a:・、b:白、c:・、d:白、e:・、f:白
  • 2、a:・、b:・、c:黒、d:黒、e:黒、f:・
  • 3、a:・、b:白、c:黒、d:手、e:黒、f:白
  • 4、a:・、b:・、c:黒、d:黒、e:黒、f:・
  • 5、a:・、b:白、c:・、d:白、e:・、f:白

「・」は、この問題では使わないマスです。ただしe5は中央4マスの一つなので、実際の対局では必ず石があります。この配置ではe5がどちらの色でも結果は変わりません。

白がd3に置いたときの8方向を、一つずつ確かめます。

  • 上、返る黒石:d2、白の終端:d1
  • 右上、返る黒石:e2、白の終端:f1
  • 左上、返る黒石:c2、白の終端:b1
  • 右、返る黒石:e3、白の終端:f3
  • 左、返る黒石:c3、白の終端:b3
  • 下、返る黒石:d4、白の終端:d5
  • 右下、返る黒石:e4、白の終端:f5
  • 左下、返る黒石:c4、白の終端:b5

8方向で合計8個が返ります。どの方向も、黒1個のすぐ先が白なので、途中に空きマスは入りません。

石の総数はe5を含めて17個です。通常の進行(パスなし)なら、石の数は「4個+打った手数」なので、13手を打った後で白番になります。ただし、この配置が実際に13手で作れるかは確かめていません。この表は、ルール上の成立を確かめる構成図として使ってください。

コードで確かめる

表の配置を自分で検算し、石を動かして試すための最小のコードです。HTMLファイルとして保存してブラウザで開くと、結果が表示されます。

html
<script>
const board = [
  ".W.W.W..",
  "..BBB...",
  ".WB.BW..",
  "..BBB...",
  ".W.W.W..",
  "........",
  "........",
  "........"
].map(r => r.split(""));
const me = "W", opp = "B";
const dirs = [[-1,0],[-1,1],[0,1],[1,1],[1,0],[1,-1],[0,-1],[-1,-1]];
function flips(row, col) { // 行・列とも0始まり
  if (board[row][col] !== ".") return null;
  const result = [];
  for (const [dr, dc] of dirs) {
    let r = row + dr, c = col + dc, run = 0;
    while (board[r]?.[c] === opp) { r += dr; c += dc; run++; }
    if (run > 0 && board[r]?.[c] === me) result.push(run);
  }
  return result;
}
const f = flips(2, 3); // d3
document.body.textContent =
  f.length + "方向 / " + f.reduce((a, b) => a + b, 0) + "個";
</script>

1行目が盤の1行目、左端がa列です。Wが白、Bが黒、.が空きマスです。文字を書き換えて、方向数がどう変わるかを見てください。

問3 一手で返る石は最大何個になるか

問2は石を最少にした構成でした。反対に、各方向の連続を盤の端まで伸ばすと、返る石の数は最大になります。d3を例に、方向ごとに「盤の端の手前まで相手の石、端の1マスが自分の石」とします。

  • 上、返る石:d2、個数:1、終端(自分の石):d1
  • 下、返る石:d4〜d7、個数:4、終端(自分の石):d8
  • 左、返る石:c3、b3、個数:2、終端(自分の石):a3
  • 右、返る石:e3、f3、g3、個数:3、終端(自分の石):h3
  • 左上、返る石:c2、個数:1、終端(自分の石):b1
  • 右上、返る石:e2、個数:1、終端(自分の石):f1
  • 左下、返る石:c4、b5、個数:2、終端(自分の石):a6
  • 右下、返る石:e4、f5、g6、個数:3、終端(自分の石):h7

合計は1+4+2+3+1+1+2+3で17個です。c3でも同じ手順で数えると17個になります。12マスは盤の対称(回転と鏡映)でc3の仲間とd3の仲間に分かれるので、8方向に効く手の上限は、どのマスでも17個です。

この構成では、黒17個と白8個、合計25個の石が必要で、e5を加えると26個になります。石の数は「4個+手数」なので、パスがなければ22手を打った後の黒番です。盤面が埋まる序盤から中盤にかけての石数ですが、これも実際に作れるかは確かめていません。

数え間違いの典型は、返る石の個数と方向の数を混同することです。「8方向」は、返る石の連続が8本あるという意味で、石が8個返るという意味ではありません。問3の構成は8方向のまま17個返ります。

問4 実際の対局で起こりうるかを確かめる

ここからは、読者が自分で探すための手順です。結果の有無をこの記事は述べません。

対局で8方向に効く手が現れるための必要条件は、次の3点です。

  1. 空きマスが、c3〜f6の12マスのどれかである。
  2. そのマスの周囲8マスがすべて埋まっていて、すべて相手の石である。
  3. 各方向の相手の石の連続の先に、自分の石がある。

条件2が最も絞り込みになります。「周囲8マスがすべて相手の石で囲まれた空きマス」を見つけることが、探索の第一歩です。

アソバースの「潮目のオセロ」には、ひとり対局に返る石のプレビューと一手戻す機能があります。ひとり対局では、置く前に返る石が表示され、置いた後に戻せるので、同じ局面から別の手を試せます。プレビューの見え方の細部は、作品を開いて確かめてください。

記録の取り方は次のとおりです。

  • 何を記録するか:自分が置く手ごとの「返る方向の数」です。プレビューの石を数えて、方向に分けます。
  • 単位:一手ごとです。
  • 回数:まず10局を目安に、各局で自分の手番すべてを記録します。
  • 追加で見るもの:周囲8マスがすべて相手の石になった空きマスが、一度でも現れたかどうかです。

結果の読み方は次のとおりです。

  • 6〜7方向の手が出る:8方向が遠くないことを示します。どの方向が欠けたかを記録して、次の対局で補えるか考えてください。
  • 周囲8マスが相手の石になった空きマスが現れない:8方向に必要な条件2の段階で止まっています。この場合は、相手に石を返させる形(自分の石を内側に置かせる形)を作れるかを考えてください。
  • 一度も見ないまま終わる:不可能の証明にはなりません。10局の範囲で見なかった、という記録にとどめてください。

起こりやすい誤りもあります。盤の端に近い空きマスを探してしまうことです。問1のとおり、端から2マス以内のマスでは8方向は成立しません。もう一つは、プレビューで石が多く返る手を「8方向」と思い込むことです。必ず方向ごとに数えてください。

次の行動

まず、問2のコードを保存してブラウザで開き、石の位置を1個だけ書き換えて、8方向が何方向に減るかを見てください。その後「潮目のオセロ」のひとり対局で、一手ごとの方向数を10局分記録し、周囲8マスが相手の石になった空きマスが現れるかを探してみてください。