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日)中に月の初めが日曜日になるのは何回あるか?
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2019
解法
zellerの公式で一発
mon(1,13):-!.
mon(2,14):-!.
mon(MM,MM):-!.
zeller(YY,MM,DD,H):-
mon(MM,M),
(12<M->YY1 is YY-1;YY1 is YY),
Y is YY1 mod 100,
C is YY1//100,
H is (DD+(26*M+26)//10+Y+Y//4-2*C+C//4) mod 7.
week2(1):-
between(1900,2000,YY),
between(1,12,MM),
zeller(YY,MM,1,K),
K=:=2.
main19:-
findall(C,week2(C),Count),
length(Count,Ans),
write(Ans).
0 件のコメント:
コメントを投稿