sironekotoroの日記

Perl で楽をしたい

Perl入学式 in 東京第4回でピザ会でのお題「双六」

Perl入学式 in 東京第4回でピザ会でのお題「双六」

今回の id:xtetsuji さんからのお題は双六で「あがり」までの平均何回サイコロを振れば良いか?を計算するものでした。 問題のレギュレーションは既にサポーターの id:nishiru3 さんが書いてくれております。 @nishiru3++

nishiru3.hatenablog.com

うちはこんな感じで解いてみました。平均6.3回振ればゴールにたどり着けそう、って感じですかね・・・

#!/usr/bin/env perl
use strict;
use warnings;

my $number_of_trials      = 1000000;    # 試行回数。
                                        # 100回とか10万回とか変えられるよう、変数に入れておく。
my $number_of_dice_rolled = 0;          # サイコロを振った合計回数を格納する変数。


for ( 1 .. $number_of_trials ) {        # 試行回数分繰り返す

    my $sum = 0;             # 1試行あたりのサイコロの目の合計を初期化
    while ( $sum < 10 ) {    # 目の合計(双六のマスの位置)が10以下の時は繰り返す
        $number_of_dice_rolled++;   # サイコロを振った回数 +1 する
        $sum += int( rand(6) + 1 ); # サイコロを振る(1〜6の目が出る)

        # サイコロの目の合計(双六のマスの位置)が3の倍数、かつ、
        # サイコロの目の合計が10未満の時は「振り出しに戻る」
        if ( $sum % 3 == 0 && $sum < 10 ) {
            $sum = 0;
        }
    }
}

print $number_of_dice_rolled / $number_of_trials;

今回のピザ会は盛況だった

他にも

とネタが多くて、一通り書いてからブログ公開だとしばらくかかりそうだなーってことで、先にかいた双六から公開しまする。