Commits

Victor Iacoban committed eeaed57

18 and 19

Comments (0)

Files changed (2)

src/main/clojure/euler/prob018.clj

-(ns euler.prob018)
+(ns euler.prob018
+  (:require [clojure.string :as st]))
 
-(defn euler18 []
-  0)
+(def triangle1
+  "3
+  7 4
+  2 4 6
+  8 5 9 3")
+
+(def triangle2
+  "75
+  95 64
+  17 47 82
+  18 35 87 10
+  20  4 82 47 65
+  19  1 23 75  3 34
+  88  2 77 73  7 63 67
+  99 65  4 28  6 16 70 92
+  41 41 26 56 83 40 80 70 33
+  41 48 72 33 47 32 37 16 94 29
+  53 71 44 65 25 43 91 52 97 51 14
+  70 11 33 28 77 73 17 78 39 68 17 57
+  91 71 52 38 17 14 91 43 58 50 27 29 48
+  63 66  4 68 89 53 67 30 73 16 69 87 40 31
+   4 62 98 27 23  9 70 98 73 93 38 53 60  4 23")
+
+(defn to-lists [input]
+  (let [lines (map st/trim (st/split input #"\n"))]
+    (map #(map read-string (st/split % #"\s+")) lines)))
+
+(defn to-maxims [input]
+  (let [pairs (partition 2 1 input)]
+    (map (partial apply max) pairs)))
+
+(defn merge-rows [r1 r2]
+  (map + (to-maxims r1) r2))
+
+(defn euler18 [triangle]
+  (let [lists (to-lists triangle)]
+    (reduce merge-rows (reverse lists))))

src/main/clojure/euler/prob019.clj

+(ns euler.prob019
+  (:import java.util.concurrent.TimeUnit)
+  (:import [java.util Calendar TimeZone Date]))
+
+(def week-millis
+  (.toMillis TimeUnit/DAYS 7))
+
+(def start-date
+  (doto (Calendar/getInstance)
+    (.setTimeZone (TimeZone/getTimeZone "UTC"))
+    (.set 1901 1 1 1 0)))
+
+(def end-date
+  (doto (Calendar/getInstance)
+    (.setTimeZone (TimeZone/getTimeZone "UTC"))
+    (.set 2000 12 31 1 1)))
+
+(defn next-day-seq
+  ([] (cons start-date (next-day-seq start-date)))
+  ([day]
+    (let [d (.clone day)]
+      (.add d Calendar/DATE 1)
+      (lazy-seq (cons d (next-day-seq d))))))
+
+(defn is-candidate? [d]
+  (let [day-of-week (.get d Calendar/DAY_OF_WEEK)
+        day-of-month (.get d Calendar/DAY_OF_MONTH)]
+    (and (= Calendar/SUNDAY day-of-week) (= 1 day-of-month))))
+
+(defn euler19 []
+  (count (take-while #(.before % end-date)
+           (for [x (next-day-seq) :when (is-candidate? x)] x))))