101年間のある日の曜日についての問題

(問題)
2000年から 2100年までの間で、10月18日が日曜日である年は何回あるか。
(回答)
まず、うるう年を考える。4 で割り切れる年はうるう年だが、さらに 100 で割り切れる年はうるう年でない。さらにけれども 400 で割り切れる年はうるう年である。したがって 2000年はうるう年であり、2100年はうるう年でない。
つぎに、365 ÷ 7 を計算すると 1 余るから、ある日の曜日は一年後にひとつ後にずれる(うるう年なら 2つ)。今年(2015年)の10月18日は日曜日であるから、次のような対応表ができる。数字は 200x 年ということ。

0123456789
10111213141516171819
202122232425262728
もうここまでやるなら 101 年すべてやってもいいのだが、これで一応 28 年周期だということがわかる。この中に日曜日は 4 回。したがって、101 ÷ 28 = 3 余り 17 だから、4 × 3 + 2 = 14 回が答え。


Ruby で求めてみると以下のよう。

num = 0
for i in 2000..2100
  t = Time.mktime(i, 10, 18)
  num += 1 if t.wday == 0
end
puts num    #=>14

簡単である。