サイコロを 100 回振って各目の出る割り合いを求める
サイコロを100回振って、各目の出る割り合いを求める - みずぴー日記 からインスパイヤされていますが、単純に 100 回だと面白くないので、任意の回数で遊べるようにしてみました。
確率的には 1/6 = 16.666 (%) で当分に分けられるわけですが、実際にやってみると、なかなかそうもいかないのが確率の面白いところでもあります。 プログラムとしては以下のようなものになります。
#! /usr/local/bin/nawk -f
# roll_dice.awk
# サイコロを 100 回振って、1〜6 の目が出る割合を求める
# usage: nawk -f roll_dice.awk [num]
BEGIN {
srand();
num = ARGV[1] ? ARGV[1] : 100;
for (i = 1; i <= num; i++) {
num_dice = int(rand() * 6) + 1;
count[num_dice]++;
}
for (i = 1; i <= 6; i++) {
print i " の目: " count[i] " 回 (" count[i] / num * 100 " %)";
}
}
速度的な問題もあるので、ここでは mawk で大きな数まで試してみましょう。
$ mawk -f roll_dice.awk 1 1 の目: 回 (0 %) 2 の目: 1 回 (100 %) 3 の目: 回 (0 %) 4 の目: 回 (0 %) 5 の目: 回 (0 %) 6 の目: 回 (0 %) $ mawk -f roll_dice.awk 10 1 の目: 2 回 (20 %) 2 の目: 1 回 (10 %) 3 の目: 3 回 (30 %) 4 の目: 1 回 (10 %) 5 の目: 2 回 (20 %) 6 の目: 1 回 (10 %) $ mawk -f roll_dice.awk 100 1 の目: 10 回 (10 %) 2 の目: 36 回 (36 %) 3 の目: 8 回 (8 %) 4 の目: 19 回 (19 %) 5 の目: 10 回 (10 %) 6 の目: 17 回 (17 %) $ mawk -f roll_dice.awk 1000 1 の目: 166 回 (16.6 %) 2 の目: 156 回 (15.6 %) 3 の目: 161 回 (16.1 %) 4 の目: 183 回 (18.3 %) 5 の目: 166 回 (16.6 %) 6 の目: 168 回 (16.8 %) $ mawk -f roll_dice.awk 10000 1 の目: 1605 回 (16.05 %) 2 の目: 1651 回 (16.51 %) 3 の目: 1687 回 (16.87 %) 4 の目: 1665 回 (16.65 %) 5 の目: 1744 回 (17.44 %) 6 の目: 1648 回 (16.48 %) $ mawk -f roll_dice.awk 100000 1 の目: 16558 回 (16.558 %) 2 の目: 16426 回 (16.426 %) 3 の目: 16755 回 (16.755 %) 4 の目: 16786 回 (16.786 %) 5 の目: 16729 回 (16.729 %) 6 の目: 16746 回 (16.746 %) <snip> $ mawk -f roll_dice.awk 100000000 1 の目: 16663126 回 (16.6631 %) 2 の目: 16671329 回 (16.6713 %) 3 の目: 16669708 回 (16.6697 %) 4 の目: 16666226 回 (16.6662 %) 5 の目: 16665058 回 (16.6651 %) 6 の目: 16664553 回 (16.6646 %)
rand() 関数を用いている関係もありますが、10000 回くらいやれば同じ確率になりそうだということが分かります。




