読者です 読者をやめる 読者になる 読者になる

mu chance or much chance ?

日々の戯れ言

Project Euler 19

Project Euler

Problem19を解きました.

  • Counting Sundays

You are given the following information, but you may prefer to do some research for yourself.

  • 1 Jan 1900 was a Monday.
  • Thirty days has September, April, June and November. All the rest have thirty-one, Saving February alone, Which has twenty-eight, rain or shine. And on leap years, twenty-nine.
  • A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400.

How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?

https://projecteuler.net/problem=19

問題は「20世紀中に月初めが日曜日になる回数を求めよ」.

def getZellerNum(year, month, day)
	if month == 1 || month == 2 then
		year -= 1
		month += 12
	end
	a1 = year / 4
	a2 = year / 100
	a3 = year / 400
	a4 = (13 * month + 8) / 5
	
	w = year + a1 - a2 + a3 + a4 + day
	return w % 7
end

count = 0
for y in 1901..2000 do
	for m in 1..12 do
		if getZellerNum(y, m, 1) == 0 then
			count += 1
		end 
	end
end

p count

ツェラーの公式をメソッド化しています.