This commit is contained in:
Adam Jeniski
2026-06-01 11:12:05 -04:00
parent 56738fd7f9
commit e4480066b7
+51
View File
@@ -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))))))