確率計算スクリプト
(2004.02.28)
カプセルフィギアという300円の小さいフィギアを購入することにしました。
テーマはクレヨンしんちゃんの映画シリーズから4種類出ています。
困った点があって、「ガチャガチャ」の機械から出てくるために、どれが出るかわからず、4種類をすんなり購入できないのです。
4個購入した際に、見事4種類を獲得できる確率は、そんなに高くなさそうです。
だって4個目は1種類しかありませんから、そこだけでも確率25%ですし、2個目、3個目を考えるともっと低い訳です。
では、ちょいと計算してみましょう。アルファベットabcdは4種類のそれぞれを表しています。
1個目はabcdのどれでもOKですから、4/4で確率100%です。ここで1個目をaとします。
2個目はaではNG、bcdでOKですから、3/4で確率75%です。2個目をbとします。
3個目はabではNG、cdでOKですから、2/4で確率50%です。3個目をcとします。
4個目はabcではNG、dでOKですから、1/4で確率25%です。4個目をdとします。
1〜4個目が同時に成り立つ確率は、全部掛け合わせたものになるので100%×75%×50%×25%=えーと頭悪いからわかりません。(!)
分数のまま計算しちゃいます。そう、「割り算は諸悪の根源(*1)」だから。
分母は4が4個ですから4×4=16、16×16=256(体が覚えてマス)、分子は4×3×2×1=24です。
24/256で約分するには4、いや8で分子分母を割ると3/32になって、ここから電卓で細かい数値を求めると9.375%となります。
ご注意:ガチャガチャから連続して4個買うと機械の中の在庫が減るので別の計算方法になり、少し上昇します。
でも、私は休日に1個ずつ買うために在庫の補充が行なわれて、1個目と同じ在庫になっていると仮定しています。
結局、4個買って4種類がそろう確率は、1割切る(9.375%)訳ですから、期待できませんねぇ。残念。
1個なら重複(ちょうふく)しないので買ってみると、「わくわく温泉大決戦」で指宿(いぶすき)さんが色っぽいなー。
しんちゃんが指宿さんのふくらはぎに抱きついてるし。なんてうらやま…もとい、セクハラなことを。(笑)
さて、1種類を手に入れると残りの3種類も欲しくなります。そうか、これが陰謀だったんだ。(欲しくなる作戦)
4種類をそろえるには何個買うとよいでしょうか?と言っても、毎度同じ種類になる可能性があるので、確実な個数は出ません。
そこで、「4種類がそろう確率が50%以上になるには何個買うとよいか」に切り替えます。
しかしながら、出来の悪いこの頭では考えるのが面倒です。コンピュータにシミュレーションさせてみました。
1,000,000回試して4種類そろうのが何回あったか数えて、その比率を確率としてみました。
4個目以降の確率は9.368%, 23.480%, 38.117%, 51.257%という結果から、7個目で4種類がそろうかもしれません。(半々の確率で)
3個も余計に買わなきゃならないのと、売る側のテの上に乗るのがイヤなので、1個だけにしておきます。
コンピュータってのは、こうやって使うものだと思うのですけれど、皆さんはどうやってコンピュータを使っていますか?
*1:私のCGの師匠が頻繁におっしゃっていたキーワード。ただし私が割り算が苦手なので無利矢理引用しました。
ちなみにgoogleで「割り算」「諸悪の根源」を検索すると師匠のPDFがトップで出てビックリです。
付録:シミュレーションしたスクリプト
(ここから)
#!/usr/bin/perl -w
$| = 1;
my $try = 1000000;
print "try = $try.\n";
my $ratio = 0.0;
my $j;
for ($j = 4; $ratio < 50.0; $j++)
{
print "set ";
my $count = 0;
my $i;
for ($i = 0; $i < $try; $i++)
{
my $result = ("a", "b", "c", "d")[int(rand(4))];
my $k;
for ($k = 1; $k < $j; $k++)
{
$result .= ("a", "b", "c", "d")[int(rand(4))];
}
if ($result =~ /a/ && $result =~ /b/ && $result =~ /c/ && $result =~ /d/)
{
$count++;
}
if ((0 == $i % ($try / 10)))
{
print ".";
}
}
print "done.\n";
$ratio = $count / $try * 100;
printf("results number = %d, ratio = %7.3f%%\n", $j, $ratio);
}
(ここまで)