mirror of
https://github.com/Ajetski/advent-of-code.git
synced 2025-09-30 09:23:17 -09:00
part 2
This commit is contained in:
parent
e575898b7a
commit
0327924c7a
@ -4,7 +4,8 @@
|
|||||||
[core :as c]
|
[core :as c]
|
||||||
[input-manager :refer [get-input]]))
|
[input-manager :refer [get-input]]))
|
||||||
|
|
||||||
(def input (c/map-by-coords (get-input 12)))
|
(def input (c/map-by-coords
|
||||||
|
(get-input 2024 12)))
|
||||||
|
|
||||||
(def cardinal-offsets [[0 1] [0 -1] [1 0] [-1 0]])
|
(def cardinal-offsets [[0 1] [0 -1] [1 0] [-1 0]])
|
||||||
(defn steps [loc]
|
(defn steps [loc]
|
||||||
@ -36,15 +37,56 @@
|
|||||||
(map #(count (second %)))
|
(map #(count (second %)))
|
||||||
(reduce +)))
|
(reduce +)))
|
||||||
|
|
||||||
(defn get-ans [get-perimeter-value]
|
(defn get-ans [f]
|
||||||
(loop [acc 0
|
(loop [acc 0
|
||||||
[loc & to-see] (set (keys input))]
|
[loc & to-see]
|
||||||
|
(set (keys input))
|
||||||
|
; #{[0 0]}
|
||||||
|
]
|
||||||
(if (nil? loc)
|
(if (nil? loc)
|
||||||
acc
|
acc
|
||||||
(let [shape (get-shape loc)]
|
(let [shape (get-shape loc)
|
||||||
|
value (f shape)]
|
||||||
(recur (+ acc (* (count shape)
|
(recur (+ acc (* (count shape)
|
||||||
(get-perimeter-value shape)))
|
value))
|
||||||
(s/difference (set to-see) (set shape)))))))
|
(s/difference (set to-see) (set shape)))))))
|
||||||
|
|
||||||
;; part 1
|
;; part 1
|
||||||
(get-ans get-perimeter-count)
|
(get-ans get-perimeter-count)
|
||||||
|
|
||||||
|
(defn corner-triples [[row col]]
|
||||||
|
(let [[top top-right right bottom-right bottom bottom-left left top-left]
|
||||||
|
[[(dec row) col]
|
||||||
|
[(dec row) (inc col)]
|
||||||
|
[row (inc col)]
|
||||||
|
[(inc row) (inc col)]
|
||||||
|
[(inc row) col]
|
||||||
|
[(inc row) (dec col)]
|
||||||
|
[row (dec col)]
|
||||||
|
[(dec row) (dec col)]]]
|
||||||
|
[[left top-left top]
|
||||||
|
[top top-right right]
|
||||||
|
[right bottom-right bottom]
|
||||||
|
[bottom bottom-left left]]))
|
||||||
|
|
||||||
|
(defn corner-count [pos shape]
|
||||||
|
(->> pos
|
||||||
|
corner-triples
|
||||||
|
(c/mmap #(contains? shape %))
|
||||||
|
(filter #{[true false true] ;;inner
|
||||||
|
[false true false] ;;outer
|
||||||
|
[false false false]}) ;;outer
|
||||||
|
count))
|
||||||
|
|
||||||
|
(defn inner-corner? [pos shape]
|
||||||
|
(seq (->> pos
|
||||||
|
corner-triples
|
||||||
|
(c/mmap #(contains? shape %))
|
||||||
|
)))
|
||||||
|
|
||||||
|
(defn get-num-corners [shape]
|
||||||
|
(reduce + (map #(corner-count % shape)
|
||||||
|
shape)))
|
||||||
|
|
||||||
|
;; part 2
|
||||||
|
(get-ans get-num-corners)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user