cdd3f0c78257

Problem 19
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Thu, 16 Feb 2017 14:59:06 +0000
parents 9d7ea7bf528b
children 137ba2e799c4
branches/tags (none)
files euler.asd src/euler.lisp

Changes

--- a/euler.asd	Wed Feb 15 10:24:14 2017 +0000
+++ b/euler.asd	Thu Feb 16 14:59:06 2017 +0000
@@ -13,6 +13,7 @@
                :fiveam
                :iterate
                :losh
+               :local-time
 
                )
 
--- a/src/euler.lisp	Wed Feb 15 10:24:14 2017 +0000
+++ b/src/euler.lisp	Thu Feb 16 14:59:06 2017 +0000
@@ -514,6 +514,29 @@
                  triangle
                  :from-end t))))
 
+(defun 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)?
+  (iterate
+    (for-nested ((year :from 1901 :to 2000)
+                 (month :from 1 :to 12)))
+    (counting (-<> (local-time:encode-timestamp 0 0 0 0 1 month year)
+                local-time:timestamp-day-of-week
+                zerop))))
+
 
 ;;;; Tests --------------------------------------------------------------------
 (def-suite :euler)
@@ -537,6 +560,7 @@
 (test p16 (is (= 1366 (problem-16))))
 (test p17 (is (= 21124 (problem-17))))
 (test p18 (is (= 1074 (problem-18))))
+(test p19 (is (= 171 (problem-19))))
 
 
 ;; (run! :euler)