※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

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).