雑記

由なし事を書き綴るだけ

コンプガチャ

Exice
 
「毎日が誰かの誕生日になるくらい友達が欲しい」って言うのリアルが充実してる人が紡いだ言葉らしいのだけれど、本人は365人位集めるつもりなんだろうけど、365日毎日誰かの誕生日になる確率は友達10万人で約26.5%らしいし、コンプガチャって怖いなって、思いました。
 

 

 

 

 

 

 

 

 

ってツイートを見かけたんで、本当にそうか確かめてみました。

 

・ランダムに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万人も友達が居ればまず間違いなく毎日が誰かの誕生日になるので

上のツイートは嘘ってことが分かります。

 

コンプガチャとかだともうちょっと複雑な計算が必要になるけど、

そこまでびっくりする数字にはならないと思います。

 

上のツイートを証明するためにコード書いてみたんだけどなぁ・・・

残念。

 

以上、ゴールデンウィークの自由研究でした。

 

たのしいRuby 第3版

たのしいRuby 第3版