Compare commits
1 Commits
56738fd7f9
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e4480066b7 |
@@ -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))))))
|
||||
Reference in New Issue
Block a user