すごろくプログラム
投稿:2019-07-16
こちらのツイートからブログを拝見して、自分でも書いてみようと思いました。
こんな感じ。
#!/usr/bin/env perl
use utf8;
use strict;
use warnings;
use feature "say";
use Encode::Locale;
use Math::Random::MT;
binmode STDIN, ":encoding(console_in)";
binmode STDOUT, ":encoding(console_out)";
$| = 1;
use constant TRIAL => 1_000_000;
use constant FURIDASHI => (3, 6, 9);
use constant GOAL => 10;
my $mt = Math::Random::MT->new();
my $dice = 0;
for (1 .. TRIAL) {
my $piece = 0;
while ($piece < GOAL) {
$piece += 1 + int $mt->rand(6);
$dice++;
$piece = 0 if grep {$_ == $piece} FURIDASHI;
}
}
say "試行回数は@{[TRIAL]}回";
say "「ふりだしに戻る」マスの位置は@{[FURIDASHI]}";
say sprintf "サイコロを振る回数の期待値は%1.3f", $dice / TRIAL;
期待値は6.35前後となりました。 そもそも、この期待値は合ってるのか?<おい
試行回数は1000000回 「ふりだしに戻る」マスの位置は3 6 9 サイコロを振る回数の期待値は6.354
