Problem 19. 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)?
Method:
1. Couting date day by day, with attention to the months and leap years.
2. Couting weekday day by day.
3. Count the Sundays falling on 1st.
def isLeapYear(year):
if year%4 != 0:
return False
if year%400 == 0:
return True
if year%100 == 0:
return False
return True
def add_date(year, month, day):
if month in [4,6,9,11]:
if day < 30:
day += 1
else:
day = 1
month += 1
elif month == 2:
if isLeapYear(year):
feb = 29
else:
feb = 28
if day < feb:
day += 1
else:
day = 1
month += 1
elif month == 12:
if day < 31:
day += 1
else:
day = 1
month = 1
year += 1
else:
if day < 31:
day += 1
else:
day = 1
month += 1
return year, month, day
def count():
count_sun = 0
year = 1900
month = 1
day = 1
weekday = 1
while (year,month,day) != (2000,12,31):
year,month,day = add_date(year,month,day)
weekday += 1
#print year,month,day
if day == 1 and weekday == 7:
print year, month, day
count_sun += 1
if weekday == 7:
weekday = 0
print count_sun
return
count()