Kuina-chan

くいなちゃん2018年12月11日


1~6の目が出るサイコロを使って、1~10の乱数を作ることはできますでしょうか!

[問題] 等しい確率で1~6の目が出る一般的なサイコロを使って、1~10の乱数を作りなさい。

1~10の乱数が欲しいことは多々ありますので、挑戦してみましょう。

1写像

まず、サイコロ1つを1回だけ振って、1~10の乱数が作れるかどうかを考えてみます。
これは、1~6の入力を1~10の乱数に対応付ける「写像」と考えると、後者の個数のほうが多くなり全射になりませんので、不可能であることが分かります(図1-1)。
サイコロを1回振って1~10の乱数を作る
図1-1: サイコロを1回振って1~10の乱数を作る
従って、サイコロを2つ以上使うか、2回以上振る必要があります。
では、サイコロを2つ以上、もしくは2回以上振って、ちょうど1~10の乱数に均等に対応させることはできるでしょうか。
サイコロをn回振ったとき、出る目のパターンは「6のn乗」通りになります。 しかし、6を何乗しても一の位は6のままですので、1~10に対応させようとすると常に6余ります。 これらを1~10の乱数に均等に対応させることは不可能です(図1-2)。
サイコロをn回振って1~10の乱数を作る
図1-2: サイコロをn回振って1~10の乱数を作る
一つの対処策としては、余った6パターンが出たときに「サイコロをもう一度振る」ことが考えられます。 例えばサイコロを2回振り、1回目に6が出たらもう一度振り直すとします。 このとき図1-3のように、「2回目に出た目は奇数なら0で偶数なら5」と定め、1回目に出た目と足し合わせると、1~10の乱数になります。
サイコロを2回振って1~10の乱数を作る
図1-3: サイコロを2回振って1~10の乱数を作る
このように余った6パターンをもう一度振り直すことで、1~10の乱数が作れます。 ただしこの場合、6/36の確率でサイコロを振り直さなければならないので、運が悪ければ無限にサイコロを振る羽目になります。

2無限級数の和

「無限級数の和」を用いる方法も考えられます。 目の合計が9以外になるまでサイコロを2個ずつ振り続け、9以外が出たときにサイコロを振っていた回数が偶数である確率は、なんと1/10となります(図2-1)。
無限級数の和で1/10を作る
図2-1: 無限級数の和で1/10を作る
ただこの方法で1/10の確率を作り出すことはできますが、このままでは1~10の乱数にはなりません。 そこで1/10が出なければ同様に、1/9、1/8、1/7、…の確率を作り出すことで、結果的に1~10の乱数を等しい確率で生成することができます(図2-2)。
無限級数の和で1~10を作る
図2-2: 無限級数の和で1~10を作る
しかし煩雑な上、振り直す回数も多くなるので、この方法はあまり有用ではなさそうです。

3サイコロを合体させる

複数のサイコロを接着剤で接合させることで、物理的に1~10が作れないかを考えてみました。
が、思いつきませんでした(図3-1)。
接合したサイコロで1~10を作る(失敗)
図3-1: 接合したサイコロで1~10を作る(失敗)

4結論

結局、これが一番良さそうです(図4-1)。
サイコロで1~10を作る
図4-1: サイコロで1~10を作る
1544539010jaf