コンプガチャ
ってツイートを見かけたんで、本当にそうか確かめてみました。
・ランダムに0〜364の数を生成(0は1月1日、364は12月31日に相当)
・0〜364すべての数が埋まるまでループを回す。
・ループを回した回数=誕生日をコンプリートするのに必要な人数。
ってアルゴリズムです。
一回一回の試行で幅があるので
1000回試行して、ループした回数でソート。
上位100回、下位100回のデータを除外した800回分のデータの平均を取れば
それなりに正確な数字がでます。
以下、rubyで書いたコード。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
def average(arry,n)
if arry.length<=2*n then
return 0
end
i=n
ave = 0.0
while arry.length-n > i
ave += arry[i]
i=i+1
end
return ave/(arry.length-2*n)
end
result = Array.new
1000.times do
count = 0
flag = 0
birthday=Array.new(364,0)
while true
n = rand(364)
birthday[n] = birthday[n]+1
count =count +1
i = 0
while birthday[i]!=0
if i==364 then
flag =1
break
end
i=i+1
end
if flag ==1 then
result << count
break
end
end
end
ave = result.sort
p average(ave,100)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
これを実際に実行した所
2317.285
という結果が得られました。
多少の数字のぶれはありますが
2300人ぐらい友達が居れば毎日が誰かの誕生日になります。
10万人も友達が居ればまず間違いなく毎日が誰かの誕生日になるので
上のツイートは嘘ってことが分かります。
コンプガチャとかだともうちょっと複雑な計算が必要になるけど、
そこまでびっくりする数字にはならないと思います。
上のツイートを証明するためにコード書いてみたんだけどなぁ・・・
残念。
以上、ゴールデンウィークの自由研究でした。
- 作者: 高橋征義,後藤裕蔵,まつもとゆきひろ
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2010/03/31
- メディア: 単行本
- 購入: 15人 クリック: 394回
- この商品を含むブログ (81件) を見る