-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday13.clj
40 lines (26 loc) · 880 Bytes
/
day13.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
(ns day13
(:require aoc))
(defn differences [a b]
(aoc/count-if false? (map = a b)))
(defn mirror? [part pattern nrettap line]
(let [before (take-last line nrettap)
after (drop line pattern)
diffs (map differences before after)]
(case part
1 (every? zero? diffs)
2 (= 1 (reduce + diffs)))))
(defn mirror-line [part pattern]
(aoc/find-first
#(mirror? part pattern (rseq pattern) %)
(range 1 (count pattern))))
(defn find-mirror [part pattern]
(if-let [horizontal-mirror (mirror-line part pattern)]
(* 100 horizontal-mirror)
(mirror-line part (aoc/transpose pattern))))
(defn notes-sum [patterns part]
(aoc/sum-pmap #(find-mirror part %) patterns))
(defn solve [input]
(let [patterns (aoc/parse-input-paragraphs input)]
[(notes-sum patterns 1)
(notes-sum patterns 2)]))
(solve (aoc/read-file 13))