+16
-22
src/aoc2025/day7.clj
+16
-22
src/aoc2025/day7.clj
···
11
(map #(map first %)))}))
12
13
(defn- split-beams [beams splitters]
14
-
(->> (mapcat #(if ((set splitters) %) ((juxt dec inc) %) [%]) beams)
15
-
set
16
-
vec
17
-
sort))
18
-
19
-
(defn- unsplit-beams [in-beams out-beams]
20
-
((comp sort vec) (set/intersection (set in-beams) (set out-beams))))
21
22
-
23
-
; [7] [7] => [6 8]
24
-
; [6 8] [6 8] => [5 7 7 9] => [5 7 9]
25
-
26
-
(let [grid (->> "07.txt"
27
-
util/read-file
28
-
parse-file)
29
-
;; [first-row & rest-rows] grid
30
-
;; starting-point (get-start first-row)
31
-
;; splitter-indexes (map (partial keep-indexed #(if (= %2 \^) [%1 %2] nil)) rest-rows)
32
-
[_ & beam-splits :as all-beams] (reductions split-beams (:start grid) (:splitters grid))
33
34
-
]
35
-
36
(->> (map (fn [in-beams splitters]
37
(count (set/intersection (set in-beams) (set splitters))))
38
-
(-> all-beams drop-last)
39
-
(:splitters grid))
40
(reduce +)))
···
11
(map #(map first %)))}))
12
13
(defn- split-beams [beams splitters]
14
+
(set (mapcat #(if ((set splitters) %) ((juxt dec inc) %) [%]) beams)))
15
16
+
;; (defn- unsplit-beams [in-beams out-beams]
17
+
;; ((comp sort vec) (set/intersection (set in-beams) (set out-beams))))
18
19
+
(defn- part1 [{start :start splitters :splitters}]
20
(->> (map (fn [in-beams splitters]
21
(count (set/intersection (set in-beams) (set splitters))))
22
+
(->> splitters (reductions split-beams start) drop-last)
23
+
splitters)
24
(reduce +)))
25
+
26
+
(defn- part2 [_] nil)
27
+
28
+
(defn solve
29
+
([] (solve "07.txt"))
30
+
([fname]
31
+
(->> fname util/read-file parse-file ((juxt part1 part2)))))
32
+
33
+
(solve "07-test.txt")
34
+
;(solve)