about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2021-12-06 18:14:03 +0100
committerLeah Neukirchen <leah@vuxu.org>2021-12-06 18:14:03 +0100
commitbe4d9f70ca06d1c1c21c7506d06d263a579d44a5 (patch)
treec9c7a8adf1b5651d19e4a5e8f51345a2fbf580ed
parent7b5dad8d4c9d4f91fc13f950ceff75383b75c5c4 (diff)
downloadadventofcode2021-be4d9f70ca06d1c1c21c7506d06d263a579d44a5.tar.gz
adventofcode2021-be4d9f70ca06d1c1c21c7506d06d263a579d44a5.tar.xz
adventofcode2021-be4d9f70ca06d1c1c21c7506d06d263a579d44a5.zip
day05: improve
-rw-r--r--day05.clj25
1 files changed, 9 insertions, 16 deletions
diff --git a/day05.clj b/day05.clj
index 6e5185b..0bfeb0e 100644
--- a/day05.clj
+++ b/day05.clj
@@ -7,33 +7,26 @@
        (map #(str/split % #",| -> "))
        (map (partial map parse-long))))
 
-(use 'criterium.core)
+(defn my-range [a b]
+  (case (compare a b)
+     0 (repeat a)
+    -1 (range a (inc b))
+    +1 (range a (dec b) -1)))
+
+(defn points [[x1 y1 x2 y2]]
+  (map vector (my-range x1 x2) (my-range y1 y2)))
 
 (def part1
   (->> data
        (filter (fn [[x1 y1 x2 y2]]
                  (or (= x1 x2) (= y1 y2))))
-       (mapcat (fn [[x1 y1 x2 y2]]
-                 (for [x (range (min x1 x2) (inc (max x1 x2)))
-                       y (range (min y1 y2) (inc (max y1 y2)))]
-                   [x y])))
+       (mapcat points)
        frequencies
        vals
        (filter #(< 1 %))
        count))
 ;; => 5092
 
-(defn points [[x1 y1 x2 y2]]
-  (let [dx (Long/signum (- x2 x1))
-        dy (Long/signum (- y2 y1))]
-    (loop [x x1
-           y y1
-           r []]
-      (if (and (= x2 x)
-               (= y2 y))
-        (conj r [x y])
-        (recur (+ x dx) (+ y dy) (conj r [x y]))))))
-
 (def part2
   (->> data
        (mapcat points)