のてすきあ − 完全独習非プログラマー −

Haskell で Project Euler を解く素人遊び

Problem 19

20世紀(1901.1.1 - 2000.12.31)において、1日が日曜日となる月は何回あるか

うるう年は4年に1回と思いがちだが、実際は400年に99回という壮大かつ半端な周期である。僕達はミレニアムのうるう年を過ごしたが、実は400年に1度の貴重な「400で割れる年」だったわけだ。

さて、この問題は、賢く剰余計算を駆使して数学的に解くこともできそうである。また、Haskellにはグレゴリオ暦を扱う素敵なライブラリData.Time.Callenderが用意されているので、それを使って簡潔に解くこともできそうである。

しかし、ここはそんな小技を一切無視して、力技で正面突破してみようと思う。その方が自分の力でやっつけた実感があるというものだ。

ガードは上から順番に評価されるので、書く順番は気をつけなければいけない。しかし、あとは問題分をそのままコードにしただけと言って良いだろう。

逆に泥臭く☆