パスの回数を数える:オセロの一局でパスは何回起きるか
遊びを見つける執筆にClaudeを使用しています。

オセロを何局も打っていると、「置ける場所がなくて手番を渡す」場面に出会うことがあります。ただ、記憶に残るのは派手な場面だけです。パスが一局に平均で何回起きるのか、そもそも何局に一度くらい起きるのかを、感覚だけで答えるのは難しいはずです。 この記事は、その答えを読者自身の対局記録から出すための分析の手順です。パスの回数の実際の値はここには書きません。書いてしまうと、読者の打ち方や相手の強さと関係のない数字になるからです。代わりに、何を「パス」と数えるか、何を記録するか、記録をどう集計し、結果をどこまで信じてよいかを順に示します。 珍しい出来事の頻度は、数え方の定義と局数で大きく変わります。まず定義を固め、次に記録の形を決め、最後にぶれの大きさを見積もる流れで進めます。
「パス」の定義を先に決める
数え始める前に、次の二つを分けておきます。
- 途中パス:置ける場所がない側が手番を渡し、その後も対局が続いたもの。
- 行き詰まり終局:盤に空きマスが残っているのに、両者とも置けず対局が終わったもの。
盤が全部埋まって終わる対局には、この終わり方はありません。二つを混ぜると、「一局あたりのパス回数」が、対局の途中で起きた出来事なのか終わり方の違いなのか、判別できなくなります。そこで別々の項目として集計します。
手数の数え方も決めておきます。初期配置で石が4個あり、石は一手ごとに1個増えます。パスでは増えません。終局時の盤上の石の数から4を引けば、実際に置かれた手の数になります。これは後で検算に使えます。
もう一つ、投了で終わった対局は分析から外します。投了は盤の状況と関係なく終わるので、行き詰まり終局と区別できなくなるためです。
記録の取り方を設計する
記録は一局につき1行です。最低限、次の項目を残します。
- 局の番号、書き方:通し番号、使い道:集計の単位
- 手の色の並び、書き方:置いた順に B(黒)と W(白)、使い道:途中パスの数え出し
- 終局時の石の合計、書き方:黒の数+白の数、使い道:行き詰まり終局の判定
- 相手の強さ、書き方:3段階のどれか、使い道:層別の比較
- 投了の有無、書き方:あり/なし、使い道:除外の判断
手の位置(「d3」のような座標)まで書く必要はありません。パスを数えるだけなら、誰が何番目に置いたかの色さえあれば足ります。記録の手間が小さいほど、局数を積み上げられます。
潮目のオセロで記録するときの注意
「潮目のオセロ」のひとり対局は、3段階の相手から選べます。そこで、相手の強さごとに記録欄を分けておきます。強い相手と弱い相手で、パスの起きやすさが同じとは限らないからです。
作品の記録や履歴はゲームを開いている間だけ残る設計の作品が多いので、画面を閉じる前に、色の並びと終局時の石の数を手元のメモに写します。色の並びを後から思い出すのは現実的ではないため、対局の途中で、置くたびに B か W を書き足す方法が確実です。
ひとり対局でパスがどう表示されるかは、作品を開いて確かめてください。オンライン対局では、置けない手番は自動でパスになります。自動で進むと、パスがあったことに気づかないまま終わる可能性があります。パスの有無を見落とさないよう、手番の色が連続したことを記録で拾う方法を、次の節で説明します。
オンライン対局の対戦履歴にどんな情報が残るかは、現在の案内で確認してください。履歴には保存期限もあります。分析に使いたい情報は、期限前に自分のメモへ写しておく前提で考えるのが安全です。
色の並びから途中パスを数える
黒が先手です。黒、白、黒、白と交互に置かれるのが基本で、同じ色が続いたら、その間に相手のパスがあったことになります。手の色の並びを前から読み、「次に置くはずの色」と実際の色がずれた箇所を数えれば、途中パスの回数が出ます。
たとえば色の並びが「BWBBW」なら、3手目の白の番で白が置けず、黒が続けて置いたことになります。途中パスは1回です。この数え方は、手の位置を記録しなくても使えるのが利点です。
次の小さなコードは、複数局の色の並びを1行ずつ貼り付けると、各局の途中パス回数と、その回数ごとの局数をまとめて出します。ブラウザで開くだけで動きます。
<textarea id="src" rows="5" cols="40">BWBBW
BWBWBW
BBWBW</textarea>
<button id="go">数える</button>
<pre id="out"></pre>
<script>
document.getElementById('go').onclick = () => {
const lines = document.getElementById('src').value
.split('\n').map(s => s.trim().toUpperCase()).filter(Boolean);
const dist = {};
let text = '';
lines.forEach((line, i) => {
let turn = 'B', pass = 0;
for (const ch of line) {
if (ch !== 'B' && ch !== 'W') continue;
if (ch !== turn) { pass++; turn = ch; }
turn = turn === 'B' ? 'W' : 'B';
}
dist[pass] = (dist[pass] || 0) + 1;
text += '第' + (i + 1) + '局:途中パス ' + pass + ' 回\n';
});
text += '\n回数ごとの局数\n';
Object.keys(dist).sort((a, b) => a - b).forEach(k => {
text += k + ' 回:' + dist[k] + ' 局\n';
});
document.getElementById('out').textContent = text;
};
</script>初期値の色列は、コードの動作を確かめるための短い例です。実際の対局の記録ではありません。長さも、本物の一局(置く手は最大60手)よりずっと短くしてあります。
行き詰まり終局は石の数で見分ける
行き詰まり終局の判定は、終局時の石の合計で行います。盤は64マスなので、合計が64未満なら空きマスが残ったまま終わっています。投了を除外していれば、これは「両者とも置けなかった」終わり方です。
反対に、合計が64でも、途中でパスが起きていた可能性は残ります。そのため、この検算は行き詰まり終局の判定にだけ使い、途中パスの数え出しは色の並びで行います。
また、置いた手の数(石の合計−4)と、色の並びの文字数が一致するかも確かめます。ずれていたら、記録の取りこぼしがあります。どちらが正しいかは、盤の最終状態を見直すか、その局を集計から外して判断します。
結果の読み方:何を比べ、どこまで言えるか
集計は、次の3つの値に絞ると読みやすくなります。
- 途中パスが1回以上あった局の割合:「パスが起きる局はどのくらいあるか」という問いに直接答える値です。
- 一局あたりの途中パス回数の分布:0回の局、1回の局、2回以上の局がそれぞれ何局かを並べます。平均だけにせず、分布で見ると偏りが分かります。
- 行き詰まり終局の割合:途中パスとは別の出来事として、並べて記録します。
この3つを、相手の強さごとに分けて並べます。差があるように見えても、それがたまたまかどうかは、局数で決まります。
局数が少ないときのぶれ
珍しい出来事ほど、少ない局数では割合が大きくぶれます。たとえば、どれだけ局数を重ねても、数局のうち1局でパスがあったかどうかで「割合」が大きく動きます。
一つの目安として、統計でよく紹介される「3の法則」があります。ある出来事が n 局でまったく観察されなかったとき、その出来事の本当の起きやすさの上限は、おおよそ 3÷n と見積もれる、という考え方です。仮に30局で一度も途中パスがなかった場合、上限の目安は 3÷30、つまり約10%です。0回だったから起きない、とは言えません。起きるとしても約10%までは否定できない、と読みます。
この目安は粗いものです。本格的に確かめたいときは、統計の入門書や公式の解説で、区間推定の考え方を確認してください。
起こりやすい誤り
- 自分の癖を一般化する:自分の打ち方で出た割合は、「自分が打つオセロ」の割合です。他の人や、別の相手には当てはまらない可能性があります。
- 勝った局だけ記録する:記録しやすい局だけが残ると、割合が偏ります。勝ち負けに関係なく、打った局は全部記録します。
- パスを手数に含める:置いた手の数は石の数から出します。パスを手数に数えると、検算が合わなくなります。
- 相手の強さを混ぜる:強さごとの層別をやめると、どの条件の割合なのか分からなくなります。
- 同じ局を二重に数える:やり直しや一手戻しを使った局は、途中の手を取り消した後の色の並びを記録します。取り消し前の手まで並べないようにします。ヒントと一手戻すはひとり対局の機能です。
次の行動
まず、記録用のメモを用意し、次の対局から色の並びと終局時の石の数を書き始めてください。局数が増えたら、上のコードに貼り付けて、途中パスが起きた局の割合と回数ごとの分布を出します。相手の強さごとに分けて比べるときは、各条件の局数をそろえるほうが読みやすくなります。
最初の目標は、1つの条件で数十局分の記録をそろえることです。そこまで集まれば、「パスは思ったより多いのか少ないのか」に、自分のデータで答えられます。

