書きなおしてみた
2009-03-14
- ○: 0314152759 → 3月14日15時27分59秒
- ○: 0229152759 → 2月29日15時27分59秒(閏年と判断)
- ×: 1314152759 → 13月はない。
- ×: 0431152759 → 4月31日はない。
- ×: 0314152760 → 60秒はない。
テストケースのチェックもしないと。というわけで先の
書きなおしてみました。
import urllib 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} def is_mdhms(mdhms_str): ## a = [int(x) for x in mdhms_str] ## month = a[0] * 10 + a[1] ## day = a[2] * 10 + a[3] ## hour = a[4] * 10 + a[5] ## minute = a[6] * 10 + a[7] ## second = a[8] * 10 + a[9] ## return ( ## 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)) month = int(mdhms_str[0:2]) day = int(mdhms_str[2:4]) hour = int(mdhms_str[4:6]) minute = int(mdhms_str[6:8]) second = int(mdhms_str[8:10]) return ( 1 <= month <= 12 and 1 <= day <= DAY_LIMIT[month] and 1 <= hour <= 23 and 1 <= minute <= 59 and 1 <= second <= 59) def mdhms_print(i, mdhms_str): month, day, hour, minute, second = [ mdhms_str[x : x + 2] for x in range(0, len(mdhms_str), 2)] print u'%d桁目, %s月%s日%s時%s分%s秒' % ( i + 1, month, day, hour, minute, second) print '"%s"' % mdhms_str print u'テストケース:' for s in ( '0314152759', '0229152759', '1314152759', '0431152759', '0314152760'): mdhms_print(0, s) print is_mdhms(s) print print u'本番:' 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 '完了.' for i in range(len(pi_str)): mdhms_str = pi_str[i : i + 10] if is_mdhms(mdhms_str): mdhms_print(i, mdhms_str) break # この行を削れば次々と探し続ける
結果。
テストケース: 1桁目, 03月14日15時27分59秒 "0314152759" True 1桁目, 02月29日15時27分59秒 "0229152759" True 1桁目, 13月14日15時27分59秒 "1314152759" False 1桁目, 04月31日15時27分59秒 "0431152759" False 1桁目, 03月14日15時27分60秒 "0314152760" False 本番: π の値を読んでます: "ftp://pi.super-computing.org/pub/pi10m/pi10m.ascii.01of10" 完了. 287桁目, 07月26日02時49分14秒 "0726024914"