From 103e3a22988bcc189bcc53bbd086103b71258408 Mon Sep 17 00:00:00 2001 From: Vahagn Khachatryan Date: Sat, 15 Nov 2014 23:38:58 +0400 Subject: [PATCH] Project Euler problem 19 --- project_euler/p019_CountingSundays.py | 63 +++++++++++++++------------ 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/project_euler/p019_CountingSundays.py b/project_euler/p019_CountingSundays.py index c1118d1..b3db7ce 100644 --- a/project_euler/p019_CountingSundays.py +++ b/project_euler/p019_CountingSundays.py @@ -1,30 +1,37 @@ -/* Check cf5-opt.vim defs. -VIM: let g:lcppflags="-std=c++11 -O2 -pthread" -VIM: let g:wcppflags="/O2 /EHsc /DWIN32" -VIM: let g:argv="" -VIM-: let g:cf5output=0 -*/ -#include -#include +#Counting Sundays +#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)? +# -/* -*/ - -int main ( void ) -{try{ - - return 0; -} -catch ( const std::exception& e ) -{ - std::cerr << std::endl - << "std::exception(\"" << e.what() << "\")." << std::endl; - return 2; -} -catch ( ... ) -{ - std::cerr << std::endl - << "unknown exception." << std::endl; - return 1; -}} +# let's encode sunday 0 - mon 1 ... +# 1 Jan 1901 +a = 365 #1900 is not a leap year +a += 1 #1 jan is monday +a %= 7 #the day of 1 jan 1901 +c = 0 #count of months for which sundays fell on march. +m = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ] +for i in range( 1901, 2001 ): + for j in range( 1, 13 ): + if a==0: + c += 1 + a += m[j-1] + if j==2 and i%4==0: + a += 1 + a %= 7 +print(c)