ついでだから、Pythonでも書いてみよう。
import randomnRep = 100000
nDays = 365
nAcc = 7def calcMinInterval():
a = [ random.randint(0, nDays - 1) for i in range(nAcc) ]
a.sort()
min = nDays + a[0] - a[nAcc-1]
for i in range(1, nAcc):
interval = a[i] - a[i-1]
if interval < min:
min = interval
return minminInterval = [ 0 for i in range(nDays / nAcc + 1) ]
for i in xrange(nRep):
minInterval[calcMinInterval()] += 1for i in range(nDays / nAcc + 1):
print "%d,%d" % (i, minInterval[i])
Perlよりちと遅かった。
内包表現
例えば、
[ 0, 0, 0, 0, 0 ]
というリストを作りたいとき、こう書ける。
l = [ 0 for i in range(5) ]
range(5)は、[ 0, 1, 2, 3, 4 ]を返す。
[ i * i for i in range(5) ]
は、
[ 0, 1, 4, 9, 16 ]
を返す。
xrange
rangeはリストを返すが、for文でたくさん回したいときは、xrangeを使うとよいらしい。これはリストではないんだとか。
for i in xrange(nRep):
minInterval[calcMinInterval()] += 1