すごろくプログラム
投稿: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