数学の日クイズ

プログラマの数学

Python でやってみた。

import urllib

pi_url = 'ftp://pi.super-computing.org/pub/pi10m/pi10m.ascii.01of10'
f = urllib.urlopen(pi_url)
print u'π の値を読んでます: "%s"' % pi_url,
pi_str = ''.join(f.read().split())
f.close()
print '完了.'
pi = [int(x) for x in pi_str]
day_limit = {
    1: 31,
    2: 29,
    3: 31,
    4: 30,
    5: 31,
    6: 30,
    7: 31,
    8: 31,
    9: 30,
    10: 31,
    11: 30,
    12: 31}
for i in range(len(pi)):
    month = pi[i] * 10 + pi[i + 1]
    day = pi[i + 2] * 10 + pi[i + 3]
    hour = pi[i + 4] * 10 + pi[i + 5]
    minute = pi[i + 6] * 10 + pi[i + 7]
    second = pi[i + 8] * 10 + pi[i + 9]
    if (month in range(1, 13) and
        day in range(1, day_limit[month] + 1) and
        hour in range(1, 24) and
        minute in range(1, 60) and
        second in range(1, 60)):
           print u'%d桁目, %02d月%02d日%02d時%02d分%02d秒' % (
               i + 1, month, day, hour, minute, second)
           print '"%s"' % pi_str[i : i + 10]
           break

結果。

π の値を読んでます: "ftp://pi.super-computing.org/pub/pi10m/pi10m.ascii.01of10" 完了.
287桁目, 07月26日02時49分14秒
"0726024914"

πの歴史 (ちくま学芸文庫)
すっごい愚鈍な方法である上に、肝心な π の値を Web 上から拾ってきちゃったり*1してます。でもコード組む手間まで含めるなら今の私にとってはこれが一番手軽な方策かな。

しかし Web から全部のデータを読み込んでからにせず必要な分ずつ読むようにした方が色々な方面に優しいとは思いますが。
D

*1:でも「π を計算しろ」というクイズでもないだろうしこれでいいのか?