こんにちは、おーしまです。
今回は、この前作ったBINGOプログラムを用いて、
「何度ルーレットを回すとBINGOするのか」
の、データを取ってみました。
こちらのプログラムを使用しています。
tomo-bb-aki0117115.hatenablog.com
調べると、一般的なBINGOカードは1~75の数字を用いるらしいので、
プログラムを変更し、1~75の数字で、ビンゴカードを作るようにしました。
結果
解説
こちらはBINGOを10,000回試行した時のデータです。
ランダムに1~75の数字を抽選し、穴が開いても、開かなくても、「1回」
として、それが何回でBINGOするかをまとめました。
そして、10回ごとにBINGOする確率を表示しています。
その下は、
- 10,000回BINGOした時の抽選回数の平均
- 10,000回BINGOして、最も早くBINGOした時の抽選回数
- 10,000回BINGOして、最も遅くBINGOした時の抽選回数
です。
20回以下でBINGOする確率が約2%なので、50人に1人しかいないようですね。
もっと確率高いと思ってた。
一番BINGOしやすいのは、41~50回で約37%となりました。
最速、6回早すぎww
コード
#全体のコードの最後の部分 if count <= 10 count_num_1 << count elsif count <= 20 count_num_2 << count elsif count <= 30 count_num_3 << count elsif count <= 40 count_num_4 << count elsif count <= 50 count_num_5 << count elsif count <= 60 count_num_6 << count elsif count <= 70 count_num_7 << count elsif count <= 80 count_num_8 << count end puts count count_num << count end puts "10回以下でBINGOする確率は#{sprintf("%.2f",count_num_1.length / 100.to_f)}%でした" puts "11回〜20回でBINGOする確率は#{sprintf("%.2f",count_num_2.length / 100.to_f)}%でした" puts "21回〜30回でBINGOする確率は#{sprintf("%.2f",count_num_3.length / 100.to_f)}%でした" puts "31回〜40回でBINGOする確率は#{sprintf("%.2f",count_num_4.length / 100.to_f)}%でした" puts "41回〜50回でBINGOする確率は#{sprintf("%.2f",count_num_5.length / 100.to_f)}%でした" puts "51回〜60回でBINGOする確率は#{sprintf("%.2f",count_num_6.length / 100.to_f)}%でした" puts "61回〜70回でBINGOする確率は#{sprintf("%.2f",count_num_7.length / 100.to_f)}%でした" puts "71回〜80回でBINGOする確率は#{sprintf("%.2f",count_num_8.length / 100.to_f)}%でした" puts "\n\n" puts "BINGOまでの平均回数は#{count_num.sum.fdiv(count_num.length)}でした。" puts "最速でBINGOしたのは#{count_num.min}回でした" puts "最遅でBINGOしたのは#{count_num.max}回でした"
最後の部分のコードです。
数字を抽選するたびに、countに1を足して、
BINGOした時のcountをif文で振り分けて
count_num1~8に入れています。
count_numには毎回countを入れます。
最初に10000.timesを記述し、10000回繰り返しています。
sprintf("%.2f",count_num_1.length / 100.to_f)
sprintf("%.2f" で、少数第二位まで表示させています。
count_num_1.length で、配列に何個数字が入っているか調べています。
10,000回試行なので、10,000で割り、それにx100で、%にするので、100で割っています。
/100.to_f とする事で少数まで表示させることができます。
(例:デフォルトでは、100 / 3 = 33 となり、33.3333333333とならない。 )
count_num.sum.fdiv(count_num.length)
上は、配列count_numの中身の数字の平均を出すコードです。
.minで配列内の一番小さい数字、.maxで配列内の一番大きい数字を取得しています。
コードは結構、簡単にできたよ。
今回はここまでです。
それでは、また〜