Solution to Project Euler problem 19

db4
Aaron Schaefer 2007-12-24 16:29:04 -05:00
parent 2aa9dc9dde
commit 319d96384e
2 changed files with 55 additions and 1 deletions

View File

@ -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
! --------
<PRIVATE
: start-date ( -- timestamp )
1901 1 1 0 0 0 0 make-timestamp ;
: end-date ( -- timestamp )
2000 12 31 0 0 0 0 make-timestamp ;
: (first-days) ( end-date start-date -- )
2dup timestamp- 0 >= [
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

View File

@ -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
<PRIVATE