Perl入学式 in 東京第4回でピザ会でのお題「双六」
Perl入学式 in 東京第4回でピザ会でのお題「双六」
今回の id:xtetsuji さんからのお題は双六で「あがり」までの平均何回サイコロを振れば良いか?を計算するものでした。 問題のレギュレーションは既にサポーターの id:nishiru3 さんが書いてくれております。 @nishiru3++
うちはこんな感じで解いてみました。平均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;
今回のピザ会は盛況だった
他にも
- ライフゲーム
- Imger
- 並列処理
とネタが多くて、一通り書いてからブログ公開だとしばらくかかりそうだなーってことで、先にかいた双六から公開しまする。