# -*- coding: utf-8 -*- # http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2019 # # 問題設定が現実と一致しているためツェラーの公式を使う.(ズルイ?) # # y年m月d日の曜日をツェラーの公式で求める. def zeller(y, m, d) if (m < 3) y -= 1 m += 12 end (y + y / 4 - y / 100 + y / 400 + (13 * m + 8) / 5 + d) % 7 end # 月の初めが日曜日の数 puts 1901.upto(2000).reduce(0){|sum1, y| sum1 + 1.upto(12).reduce(0){|sum2, m| sum2 + (zeller(y, m, 1) == 0 ? 1 : 0) } }