LoginSignup
4
4

More than 5 years have passed since last update.

サイコロ勝負

Posted at

何をするの?

相手に、ほぼ勝てるような勝負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

以上


  1. 「万能鑑定士Qの事件簿」の京サイコロのようなもの 

  2. 本当にやると友達をなくすかも 

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4