さいころを使った1〜Nまでの完全な乱数の作り方 2≦N≦20
人生ゲームとかやる時用に 手軽になるように作ってみました。振る回数の期待値は全て3以下です。
振る必要のある回数の期待値も併記しています。これより減らせる場合はコメントによろしくお願いします。回数はおそらくΣ[k=1..∞](6^(k-1)%n)/6^(k-1)になるだろう、という予測が経ちましたが、全ての明記はちょっと複雑になるので止めておきます。n=13,14,16,17,19,20が最善でないです。
N=2 (1回)
方法1
さいころを1回振り、偶数の場合1、奇数の場合2
方法2
3以下なら1、4以上なら2
N=3 (1回)
方法1
さいころを1回振り、3で割った余りに1を足す
方法2
1〜2が1、3〜4が2、5〜6が3とする
N=4 (1.5回)
5以上が出たら振りなおす
別解法
- N=2を2回利用する(2回)
追記 omeometoさん提供(1.333333回)
1〜4が出たらそのまま確定
5〜6が出たら、これにN=2の結果を組み合わせて判定
N=5 (1.2回)
6が出たら振りなおす
N=6 (1回)
普通に振る
N=7 (2.0571428回)
サイコロを2回振り、出た目の和を7で割った余りに1を足す。ただし、1回目が1、2回目が6の場合のみ振り直す。
参考
- 1・・・(2,5) (3,4) (4,3) (5,2) (6,1) の5通り (1,6)は振り直し
- 2・・・(2,6) (3,5) (4,4) (5,3) (6,2) の5通り
- 3・・・(1,1) (3,6) (4,5) (5,4) (6,3) の5通り
- 4・・・(1,2) (2,1) (4,6) (5,5) (6,4) の5通り
- 5・・・(1,3) (2,2) (3,1) (5,6) (6,5) の5通り
- 6・・・(1,4) (2,3) (3,2) (4,1) (6,6) の5通り
- 7・・・(1,5) (2,4) (3,3) (4,2) (5,1) の5通り
となり、均等な割合で発生する。ぶっちゃけ1〜36に変換して、36切り捨てでmod7でも良いですw
別解法
- N=8を別解を利用して8以上振り直し(2.857142回)
- N=9を利用して8以上振り直し(2.571428回)
N=8(2.25回)
N=9を利用して、9の場合振りなおす
別解法
- N=2とN=4を利用し算出(2.5回)
追記 xhlさん提供(2.111111回)
2回振った目がa,bだった時に(a-1)*6+(b-1)の値=nが0〜31の場合n%8+1, 32〜35の場合1回振りなおしてその値をcとすると(n-32)*2+c%2+1 とすると2.111111回
N=9(2回)
A=1〜3の乱数(1回)
B=1〜3の乱数(1回)
A*3+B-3で、1〜9の乱数となる
N=10(2.2回)
A=1〜5の乱数(1.2回)
B=1〜2の乱数(1回)
A*2+B-2で、1〜10の乱数となる
N=11(2.181818回)
N=12の方法で乱数を生成 12の時のみやり直し
N=12(2回)
A=1〜6の乱数(1回)
B=1〜2の乱数(1回)
A*2+B-2で、1〜12の乱数となる
N=13(2.53846回)
N=15を利用し、14以上が出たら振り直し
N=14(2.357142回)
N=15を利用し、15が出たら振り直し
別解法
- N=2とN=7を利用して算出(3.0571428回)
N=15(2.2回)
A=1〜5の乱数(1.2回)
B=1〜3の乱数(1回)
A*3+B-3で、1〜15の乱数となる
N=16(2.25回)
N=18を利用し、17以上で振り直し
別解法
- N=4を2回利用する(3回)
N=17(2.117647回)
N=18を利用し、18の時振り直し
N=18(2回)
A=1〜6の乱数(1回)
B=1〜3の乱数(1回)
A*3+B-3で、1〜18の乱数となる
N=19(2.842105回)
N=20を利用し、20以上の場合振り直し
N=20(2.7回)
A=1〜5の乱数(1.2回)
B=1〜4の乱数(1.5回)
A*4+B-4で、1〜20の乱数となる