From e4480066b751cd6d22c90ef43540dbbc1abe3da3 Mon Sep 17 00:00:00 2001 From: Adam Jeniski Date: Mon, 1 Jun 2026 11:12:05 -0400 Subject: [PATCH] do day 3 --- 2017/src/day03.clj | 51 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 2017/src/day03.clj diff --git a/2017/src/day03.clj b/2017/src/day03.clj new file mode 100644 index 0000000..14a9585 --- /dev/null +++ b/2017/src/day03.clj @@ -0,0 +1,51 @@ +(ns day03 + (:require input-manager)) + +(def input (parse-long (input-manager/get-input-raw 2017 3))) + +(def directions [:right :up :left :down]) +(def to-the-left {:right :up + :up :left + :down :right + :left :down}) +(def cardinal-dir-offsets {:right [1 0] + :left [-1 0] + :down [0 -1] + :up [0 1]}) + +(def all-offsets #{[1 0] [-1 0] [0 -1] [0 1] [1 1] [-1 -1] [1 -1] [-1 1]}) + +(->> (loop [loc [1 0] + i 2 + grid {[0 0] 1} + [dir :as dirs] (cycle directions)] + (if (< i input) + (let [left-loc (mapv + loc (cardinal-dir-offsets (to-the-left dir))) + grid' (assoc grid loc i) + i' (inc i)] + (if (contains? grid left-loc) + (recur (mapv + loc (cardinal-dir-offsets dir)) i' grid' dirs) + (recur left-loc i' grid' (rest dirs)))) + loc)) + (map abs) + (apply +)) + +(->> (loop [loc [1 0] + grid {[0 0] 1} + [dir :as dirs] (cycle directions)] + (let [left-loc (mapv + loc (cardinal-dir-offsets (to-the-left dir))) + value (->> all-offsets + (map (comp + #(or (grid %) 0) + #(mapv + % loc))) + (reduce +)) + grid' (assoc grid loc value)] + (cond + (> value input) + value + + (contains? grid left-loc) + (recur (mapv + loc (cardinal-dir-offsets dir)) grid' dirs) + + :else + (recur left-loc grid' (rest dirs))))))