From 319d96384e428c2d34cc6b45e5fb875f81aa829b Mon Sep 17 00:00:00 2001 From: Aaron Schaefer Date: Mon, 24 Dec 2007 16:29:04 -0500 Subject: [PATCH] Solution to Project Euler problem 19 --- extra/project-euler/019/019.factor | 54 ++++++++++++++++++++++++ extra/project-euler/project-euler.factor | 2 +- 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 extra/project-euler/019/019.factor diff --git a/extra/project-euler/019/019.factor b/extra/project-euler/019/019.factor new file mode 100644 index 0000000000..26f16c0b8f --- /dev/null +++ b/extra/project-euler/019/019.factor @@ -0,0 +1,54 @@ +! Copyright (c) 2007 Aaron Schaefer. +! See http://factorcode.org/license.txt for BSD license. +USING: calendar combinators.lib kernel math namespaces ; +IN: project-euler.019 + +! http://projecteuler.net/index.php?section=problems&id=19 + +! DESCRIPTION +! ----------- + +! 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)? + + +! SOLUTION +! -------- + += [ + dup day-of-week , 1 +month (first-days) + ] [ + 2drop + ] if ; + +: first-days ( start-date end-date -- seq ) + [ swap (first-days) ] { } make ; + +PRIVATE> + +: euler019 ( -- answer ) + start-date end-date first-days [ zero? ] count ; + +! [ euler019 ] 100 ave-time +! 131 ms run / 3 ms GC ave time - 100 trials + +MAIN: euler019 diff --git a/extra/project-euler/project-euler.factor b/extra/project-euler/project-euler.factor index 51e40f6646..acf9215d58 100644 --- a/extra/project-euler/project-euler.factor +++ b/extra/project-euler/project-euler.factor @@ -6,7 +6,7 @@ USING: io io.files kernel math.parser namespaces sequences strings project-euler.005 project-euler.006 project-euler.007 project-euler.008 project-euler.009 project-euler.010 project-euler.011 project-euler.012 project-euler.013 project-euler.014 project-euler.015 project-euler.016 - project-euler.017 ; + project-euler.017 project-euler.018 project-euler.019 project-euler.067 ; IN: project-euler