2026年8月16日放送の『ゴールデンストーンズ』において、「303,863回以内に4球でビンゴできるか?」という企画があった。
え?このネタ、先延ばしにし続けてもう1ヶ月くらい経ったの……!?
同番組では、以下のビンゴカードを使用していた。
6 25 40 58 61
8 24 36 53 65
9 23 F 56 69
4 19 42 57 66
3 20 33 54 68
そして、初期状態から4球だけ抽選し、ビンゴができるかということである。
4球でビンゴを出すには、真ん中の FREE を通る縦、横、ナナメ (2通り) のいずれかの数字の組が出なければならない。
これらの数字の組の要素には、重複は無い。
よって、条件を満たす数字の出方は、「4個の要素の順列」4組分なので、
4! \times 4 = 96
通りである。
一方、4球抽選したときの全ての出方は、75個から4個選ぶ順列の個数なので、
{}_{75} \textrm{P}_4 = 75 \times 74 \times 73 \times 72 = 29170800
よって、4球でビンゴができる確率は
\frac{96}{29170800} = \frac{1}{303862.5}
である。
この分母は「303,863回以内」という数字とほぼ同じなので、これが成功する確率は約 63%のはずである。
(独立に $1/n$ の確率で当たるクジを $n$ 回引いたときに 1 回以上当たる確率は、$n$ を大きくすると $1 - 1/e \approx 63\%$ に近づくことが知られている)
番組では「公平性を期すためAIアプリで抽選」と主張していたが、その詳細はおそらく開示されていない。
ここでは、Python を使用してシミュレーションを行ってみよう。
番組では毎回手動で演出を止めて選ばれた数字を出していたが、ここではそのような演出は不要である。
4球でビンゴできるまでやってみる
まずは、4球でビンゴできるまで試行を繰り返し、試行回数を出力してみた。
前述の通り、4球でビンゴするためには、特定の数字の組のなかのいずれかが出る必要がある。
逆に、これらの数字の組のなかのいずれかが出れば、4球でビンゴしたことになる。
より許容する球数を増やすのであれば真面目にビンゴ判定を行うべきかもしれないが、今回は簡単のため、直接埋め込んだビンゴになる数字の組のいずれかが出た数字の組と一致するかで判定することにした。
抽選には、random.SystemRandom を用いた。
これは、予測不能性が期待できる乱数を生成する os.urandom 関数を用いるので、既知の乱数系列によって結果が決まってしまう心配を減らすことができる。
最後に、random.sample 関数で 1~75 の整数の中から 4 個をランダムに取り出す。
これをソートすることにより正規化し、ソートされた出ればビンゴとなる数字の組の中にあるかをチェックする。
import random
targets = {
(6, 24, 57, 68),
(33, 36, 40, 42),
(3, 19, 53, 61),
(9, 23, 56, 69)
}
rng = random.SystemRandom()
cnt = 0
while True:
cnt += 1
balls = tuple(sorted(rng.sample(range(1, 76), 4)))
if balls in targets:
break
print(cnt)
実際に実行してみると、たとえば以下の結果となった。
YUKI.N>python bingo_in_4.py
663602
YUKI.N>python bingo_in_4.py
123411
YUKI.N>python bingo_in_4.py
1211884
YUKI.N>python bingo_in_4.py
66340
YUKI.N>python bingo_in_4.py
451527
YUKI.N>python bingo_in_4.py
33266
YUKI.N>python bingo_in_4.py
38907
YUKI.N>python bingo_in_4.py
34171
YUKI.N>python bingo_in_4.py
37205
YUKI.N>python bingo_in_4.py
110585
10回実行したうち、303,863回以内に終わった (ビンゴした) のは7回、そうでないのは3回である。
試行回数が少ないものの、「約 63% の確率でできる」という予測とだいたいあっていそうである。
しかし、やはり試行回数が少ない。
もっとたくさんやってみよう。
303,863回の試行を繰り返す
今度は、303,863回までやってみて、ビンゴしなければそこで終了、という処理を繰り返してみることにした。
なお、途中でビンゴすれば、そのセットはそこで終了とする。
import random
import sys
num_try = 303863
num_repeat = 1000
targets = {
(6, 24, 57, 68),
(33, 36, 40, 42),
(3, 19, 53, 61),
(9, 23, 56, 69)
}
rng = random.SystemRandom()
cnt = 0
for _ in range(num_repeat):
bingo = False
for __ in range(num_try):
balls = tuple(sorted(rng.sample(range(1, 76), 4)))
if balls in targets:
bingo = True
break
if bingo:
sys.stderr.write("o")
cnt += 1
else:
sys.stderr.write("x")
sys.stderr.flush()
sys.stderr.write("\n")
print(cnt)
これを1回実行してみたところ、以下の出力が得られた。
oxoxooxoxxooxoooooxxoxoxxooxooxoxoooxxooxoxooooxxxooooxoxooxooooooxoooxxoooxoxoxoxoxoooooxxoooxxxxooxxooxxoxxxooooxoooox
xooxxoooxoxxxxoxooxoxooxxoooxxxoxxoooxoxxxooxxoooxxxoxoxxoooooooooxoooxoooooooxoooxoxoooooooooxxxoooooooxoooxooooooxoxxx
xoxxooxxooxxxxxxooxoooxxoxooooooxxooxxooooxxxxooxoxxoooooxoxooxxoxoxxoxxooooxoxoxoxxooooooooxoxooxxoxoxooxoxooxxxxxxooxo
ooxooooxxoooooooooxxooxoxxxooxxoxxxoxoooxoxxoxoxoxxxxxooooooooxoxxooooooooxoxoxoooxoooxooooooooxoooxoooooxoxooxoooxoxooo
oxxoooooooooxoxxoxxxoooxooxxxoxoooxoxoxxxooxoxooooooooxxooxoxxxoxoxxoxxoooooxoxoxxoxxxoooxxxooxxooxooooxoxxooxoxooxooxoo
oxoxxoxxxoooooooxooxooxxooxoooxoxxxooxxoooxxxoxoxoooxxooxooxxxoooxoxooooxoxxooxooxoxxxxxxxxoooooooxxxxxoxxoxoxooxxoxoxoo
oxooooxooxoxxooooxxxooooxoxooooxoooxxxoxxxxoxooooxxoxxxoooooxooooxooxoxxoxoooooxxxxoxoxxooxxxoxooxooooooxoooooxxoxxxooox
oooxooooooxoooxoooooooxooxxooooxooxxxooxxooxxoxoooooxooxxoxxooxxxoxoxoooooxooooooooooxoxoxooooxoxoxoooxoxoxxoxooxoxxoxxx
oooooxoxxxxoxoooxoooxxxoxoxooooooxoooxoo
601
理論上は 632 程度の値になるはずだが、今回はそれより少し少ない結果が得られた。
とはいえ、あまり外れてはいないだろう。
きちんとした統計学的な検定は、読者への宿題とする。
おわりに
「303,863回以内に4球でビンゴできるか?」を繰り返した結果、成功の割合はだいたい理論値に近くなった。
1回の試行だけでは理論値との関係がよくわからないが、たくさん繰り返すと関係が見えてくるというのは、番組でも言っている「数だ!」という感じがする。
なお、本気で数の力で難しいことを成功させたいのであれば、もっとたくさん、十分な回数繰り返すべきだろう。
しかし、例えば 99% の確率で成功する回数にしてしまうと、ほぼ成功するはずということになり、成功するかどうかのクイズがつまらなくなってしまう。
それに対し、試行回数を1回の試行で成功する確率の逆数にする設定 (筆者はこれを「63%設定」と呼んでいる) は、成功する確率は五分に近いのでクイズ (ギャンブル、と言ったほうが適切か?) が成立し、なおかつ「成功する確率の逆数」という設定の根拠もあるのである程度の納得感があり、企画的には良い設定なのだろう。