問題
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は最後に確率を出すさいに効いている。