n人の中で誕生日が同じ人がいる確率

問題

Birthday Paradox « Programming Praxis

23人いる場合、そこに誕生日が同じ人がいる確率は50%である。57人の場合は99%だ。
これは確率の知識として知られている。
シミュレーションによってこれを確かめよう。

うるう年は考慮しない。

from __future__ import division # => Python 2.6
from random import randint

N = 10000 # 試行回数
humans = 57
rand_birthdays = lambda n: [randint(1, 365) for _ in range(n)]
isdup = lambda x: not len(set(x)) == len(x)
trials = [isdup(rand_birthdays(humans)) for _ in range(N)]
probability = len(filter(lambda x: x, trials)) / N
# => 0.99029999999999996

import divisionは最後に確率を出すさいに効いている。