2012年6月14日木曜日

プロジェクトオイラー Problem19_2

前回のproblem19では、うるう年と曜日の計算をする部分を、あえて標準モジュールを使わずに自作しましたので、pythonの標準モジュールとどうなるかを以下に記述します。

私の解答例は以下です。
-----

import datetime
def f(ymd0, ymd1):
	s, t, r = str(ymd0), str(ymd1), 0
	y0, m0 = int(s[:4]), int(s[4:6])
	y1, m1 = int(t[:4]), int(t[4:6])
	for i in xrange(y0, y1+1):
		j0, j1 = {y0:m0}.get(i,  1), {y1:m1}.get(i, 12)
		for j in xrange(j0, j1+1):
			if datetime.datetime(i, j, 1).weekday()==6: r += 1
	return r
	
print f(19010101, 20001231)
-----

うるう年と曜日の計算をする部分は、datetimeという標準モジュールですべて代替できます。
前回のソースコードと比べると、uruu関数とyoubi関数が不要になりました。

注意すべき点は、datetimeモジュールのdatetimeオブジェクトのweekday関数の戻り値は、「月曜日を 0、日曜日を 6 とする整数」であることです。
このため、日曜日判定では、weekday関数の戻り値が6かどうかを判定しています。


(追記)
・20120715
 ソースコード部分にSyntaxHighlighterを導入。

0 件のコメント:

コメントを投稿