do day 3
This commit is contained in:
@@ -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