(問題)
2000年から 2100年までの間で、10月18日が日曜日である年は何回あるか。
(回答)
まず、うるう年を考える。4 で割り切れる年はうるう年だが、さらに 100 で割り切れる年はうるう年でない。さらにけれども 400 で割り切れる年はうるう年である。したがって 2000年はうるう年であり、2100年はうるう年でない。
つぎに、365 ÷ 7 を計算すると 1 余るから、ある日の曜日は一年後にひとつ後にずれる(うるう年なら 2つ)。今年(2015年)の10月18日は日曜日であるから、次のような対応表ができる。数字は 200x 年ということ。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
水 | 木 | 金 | 土 | 月 | 火 | 水 | 木 | 土 | 日 |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
月 | 火 | 木 | 金 | 土 | 日 | 火 | 水 | 木 | 金 |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | |
日 | 月 | 火 | 水 | 金 | 土 | 日 | 月 | 水 |
Ruby で求めてみると以下のよう。
num = 0 for i in 2000..2100 t = Time.mktime(i, 10, 18) num += 1 if t.wday == 0 end puts num #=>14
簡単である。