何をするの?
相手に、ほぼ勝てるような勝負1を仕掛けます。
ルールは?
- -13から13までの数直線の0にコマを置きます。
- コマが-13または13になるまで下記を繰り返します。
- 4つのサイコロから相手が1つ選びます。
- 残りの3つのサイコロから私が1つ選びます。
- 同時に振って、数字の大きい方がコマを1だけ移動できます。
- -13になったら相手の勝ち、13になったら私の勝ち。
- サイコロは正六面体で、0から6までの数字がかかれています。
サイコロの目
「数字オンチの諸君!」には、次のような目のサイコロが出てきます。
これを使うと、AはBに2/3で、BはCに2/3で、CはDに2/3で、DはAに2/3で勝ち、引き分けはありません。後からサイコロを選ぶ方が、断然有利。
- A: 0, 0, 4, 4, 4, 4
- B: 3, 3, 3, 3, 3, 3
- C: 2, 2, 2, 2, 6, 6
- D: 1, 1, 1, 5, 5, 5
Pythonで1万回試してみる
まず、確率2/3を確認してみましょう。
python
from itertools import product
dices = [
[0, 0, 4, 4, 4, 4],
[3, 3, 3, 3, 3, 3],
[2, 2, 2, 2, 6, 6],
[1, 1, 1, 5, 5, 5],
]
for i in range(4):
print(i, sum(j > k for j, k in product(dices[i], dices[(i+1)%4]))/ 36)
>>>
0 0.6666666666666666
1 0.6666666666666666
2 0.6666666666666666
3 0.6666666666666666
相手がどのサイコロを選んでも、勝率2/3です。
1万回、勝負してみましょう。
python
from random import randint, seed
seed(1)
nn = 10000 # 試行回数
th = 13 # しきい値
ywin = 0 # 私の勝ち数
for cnt in range(nn):
p = 0
while -th < p < th:
n = randint(0, 3)
dicex = dices[n]
dicey = dices[(n+3)%4]
if dicex[randint(0, 5)] > dicey[randint(0, 5)]:
p -= 1
else:
p += 1
ywin += p > 0
print(ywin / nn) # 私の勝率
>>>
1.0
勝率100%でした2。
以上