ダイスを 30 個同時に振って、すべて 1 の目が出たら負け

ダイスを30個同時に振って、すべて1の目が出たら死ぬ遊び - mtx-hoge - 断片部からですが、個人的には確率というものを信頼していないため、同じことを言われたら断ると思いますが、ここではプログラムの話として検証してみます。

まず、ダイスを 30 個同時に振って全てが 1 になる確率ですが、これを awk で求めます。

$ nawk 'BEGIN{j=1;for(i=1;i<=30;i++){j*=6}print 1/j}'
4.52337e-24

確かに約 4 x 10 のマイナス 24 乗です。 では、30 個のダイスを同時に振って何回目で全てが 1 になるかをプログラムで確かめてみましょう。 以下のようなもので確かめることができます。

#! /usr/bin/gawk -f
# 30_dices.awk

BEGIN {
    srand();
    num = ARGV[1] ? ARGV[1] : 30;

    for (;;) {
        for (i = 1; i <= num; i++) {
            if (dice() == 1) {
                count++;
            }
        }
        turn++;
        ##printf("%d\r", turn);
        if (count == num) {
            print "Turn: " turn;
            print "Oh! you are unlucky.";
            exit;
        }
    }
}

function dice() {
    return int(rand() * 6) + 1;
}

論より証拠で実行してみます。

$ mawk -f 30_dices.awk
Turn: 5
Oh! you are unlucky.

上記のようにあっという間に終わってしまう場合もありました。 つまり確率である限り、1 回目でその事象が発生しても文句は言えないわけです。

もっとも、実際にはなかなか終わらないケースがほとんどのようです。

tag_nawk.pngtag_nawk.pngtag_nawk.pngtag_nawk.png