パズル

プログラマのための論理パズルに載っている問題を解いてみる。
0.5%の確率で被害にあう装置を使うとき、最初の50人の中に少なくとも1人が被害にあう可能性を求める。

import random

def puzzle18(percent):
    if random.randint(0, 1000) < percent:
        return 1
    else:
        return 0

i = 0
count = 0
total = 0

while i < 10000:
    count += puzzle18(5)

    if i % 50 == 0 and count > 0:
        total += 1
        count = 0

    i += 1

print total
print float(total) / float(10000 / 50)

・実行結果

44
0.22

もっとスマートに書けるような気がするのだけど・・・。
頭がうんこだな俺。