http://projecteuler.net/problem=19
Problem 19 「日曜日の数え上げ」 †
次の情報が与えられている.
1900年1月1日は月曜日である.
9月, 4月, 6月, 11月は30日まであり, 2月を除く他の月は31日まである.
2月は28日まであるが, うるう年のときは29日である.
うるう年は西暦が4で割り切れる年に起こる. しかし, 西暦が400で割り切れず100で割り切れる年はうるう年でない.
20世紀(1901年1月1日から2000年12月31日)中に月の初めが日曜日になるのは何回あるか?



解法
問題のほうで日数計算に必要なデータが提示されているので、出題の意図を読んでそれをつかって計算するのが正しいと思いますが。
ツェラーの公式で手抜きしました。

zellers(Y,M,D,Result):-
	(M<3 -> M1 is M+12,Y1 is (Y-1) mod 100;M1 is M,Y1 is Y mod 100),
	C is Y1//100,
	Result is (D+(26*M1+26)//10+Y1+Y1//4-2*C+C//4) mod 7.

search(1):-
	between(1901,2000,Y),
	between(1,12,M),
	zellers(Y,M,1,W),
	W=:=2.

main19:-
	findall(W,search(W),Ws),
	length(Ws,Len),
	write(Len).

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2014年02月13日 16:51