2012年7月16日月曜日

Project Euler-Problem19をgroovyで解いてみる

問題

次の情報が与えられている。

1900年1月1日は月曜日である。
9月、4月、6月、11月は30日まであり、2月を除く他の月は31日まである。
2月は28日まであるが、うるう年のときは29日である。
うるう年は西暦が4で割り切れる年に起こる。しかし、西暦が400で割り切れず100で割り切れる年はうるう年でない。
20世紀(1901年1月1日から2000年12月31日)で月の初めが日曜日になるのは何回あるか。

問題を解いたプログラム

def current = Calendar.getInstance()
current.set(1901, 1, 1)

def end = Calendar.getInstance()
end.set(2000, 12, 31)

int sundayCount = 0
while (current <= end) {
  if (current.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
    sundayCount++
  }
  current.set(Calendar.MONTH, current.get(Calendar.MONTH) + 1)
}
println "sundayCount = ${sundayCount}"