advent-of-code/2023/src/day21.clj
2024-01-16 20:59:52 -05:00

35 lines
1010 B
Clojure

(ns day21
(:require
[core :refer [get-puzzle-input]]))
(def input (get-puzzle-input 21))
(def char-map (->> input
(map-indexed (fn [row line]
(map-indexed (fn [col c]
[[row col] c])
line)))
(apply concat)
(into {})))
(def start (->> char-map
(filter #(= \S (second %)))
ffirst))
(def offsets [[0 1] [0 -1] [1 0] [-1 0]])
;; part 1
(loop [locs #{start}
n 0]
(if (< n 64)
(recur (->> locs
(map (fn [[x y]]
(map (fn [[x-off y-off]]
[(+ x x-off)
(+ y y-off)])
offsets)))
(apply concat)
(filter #(not= (char-map %)
\#))
(into #{}))
(inc n))
(count locs)))