/
day_10.clj
80 lines (65 loc) · 3.95 KB
/
day_10.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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
(ns advent-2022.day-10
(:require
[advent.util :as util]
[clojure.string :as str]
[net.cgrand.xforms :as xf]))
(defn parse [s]
(map (fn [l]
(let [[_ instr _ arg] (re-find #"(\w+)( (-?\d+))?"
l)]
(into [instr]
(when arg
[(parse-long arg)]))))
(str/split-lines s)))
(def init
[{:cycle 1
:x 1}])
(defn step [prev [instr arg]]
(let [{c :cycle
x :x} (peek prev)
sleep {:cycle (inc c)
:x x}]
(case instr
"addx" [sleep
{:cycle (+ 2 c)
:x (+ x arg)}]
"noop" [sleep])))
(defn run
([state instrs]
(run state
instrs
(map identity)))
([state instrs xform]
(sequence (comp cat
xform)
(reductions step
state
instrs))))
(defn part-1 [in]
(let [states (run init in)
cycles (into #{}
(range 20 221 40))]
(util/sum (comp (filter (comp cycles :cycle))
(map (fn [{c :cycle
x :x}]
(* c x))))
states)))
(defn part-2 [in]
(doseq [row (run init
in
(xf/partition 40))]
(println (str/join (map-indexed (fn [idx {x :x}]
(if (<= (dec x)
idx
(inc x))
"░"
" "))
row)))))
(comment
(def t "noop\naddx 3\naddx -5")
(def t' "addx 15\naddx -11\naddx 6\naddx -3\naddx 5\naddx -1\naddx -8\naddx 13\naddx 4\nnoop\naddx -1\naddx 5\naddx -1\naddx 5\naddx -1\naddx 5\naddx -1\naddx 5\naddx -1\naddx -35\naddx 1\naddx 24\naddx -19\naddx 1\naddx 16\naddx -11\nnoop\nnoop\naddx 21\naddx -15\nnoop\nnoop\naddx -3\naddx 9\naddx 1\naddx -3\naddx 8\naddx 1\naddx 5\nnoop\nnoop\nnoop\nnoop\nnoop\naddx -36\nnoop\naddx 1\naddx 7\nnoop\nnoop\nnoop\naddx 2\naddx 6\nnoop\nnoop\nnoop\nnoop\nnoop\naddx 1\nnoop\nnoop\naddx 7\naddx 1\nnoop\naddx -13\naddx 13\naddx 7\nnoop\naddx 1\naddx -33\nnoop\nnoop\nnoop\naddx 2\nnoop\nnoop\nnoop\naddx 8\nnoop\naddx -1\naddx 2\naddx 1\nnoop\naddx 17\naddx -9\naddx 1\naddx 1\naddx -3\naddx 11\nnoop\nnoop\naddx 1\nnoop\naddx 1\nnoop\nnoop\naddx -13\naddx -19\naddx 1\naddx 3\naddx 26\naddx -30\naddx 12\naddx -1\naddx 3\naddx 1\nnoop\nnoop\nnoop\naddx -9\naddx 18\naddx 1\naddx 2\nnoop\nnoop\naddx 9\nnoop\nnoop\nnoop\naddx -1\naddx 2\naddx -37\naddx 1\naddx 3\nnoop\naddx 15\naddx -21\naddx 22\naddx -6\naddx 1\nnoop\naddx 2\naddx 1\nnoop\naddx -10\nnoop\nnoop\naddx 20\naddx 1\naddx 2\naddx 2\naddx -6\naddx -11\nnoop\nnoop\nnoop")
(def in "addx 2\naddx 3\naddx 1\nnoop\naddx 4\naddx 1\nnoop\naddx 28\naddx -24\nnoop\naddx 5\naddx 17\naddx -16\nnoop\naddx 6\nnoop\naddx -7\naddx 11\naddx 4\nnoop\naddx 1\naddx -36\naddx -2\nnoop\nnoop\naddx 10\nnoop\nnoop\naddx -2\naddx 2\naddx 25\naddx -18\naddx 23\naddx -22\naddx 2\naddx 5\naddx -10\naddx -15\naddx 28\naddx 2\naddx 5\naddx 2\naddx -16\naddx 17\naddx -36\nnoop\nnoop\naddx 39\naddx -32\naddx -5\naddx 7\naddx 1\naddx 5\naddx -13\naddx 1\naddx 17\naddx 1\nnoop\naddx 7\nnoop\naddx -2\naddx 2\naddx 5\naddx 2\nnoop\nnoop\nnoop\nnoop\naddx -37\nnoop\nnoop\nnoop\nnoop\naddx 6\naddx 11\naddx -7\naddx 29\naddx -22\naddx 5\nnoop\nnoop\nnoop\naddx 3\nnoop\naddx 7\naddx -28\naddx 24\naddx 3\naddx 2\nnoop\naddx 2\nnoop\naddx 3\naddx -38\nnoop\naddx 7\naddx -2\naddx 1\naddx 6\naddx -10\naddx 38\naddx -25\naddx 5\naddx 2\naddx -10\naddx 11\naddx 2\nnoop\naddx 3\naddx 2\nnoop\naddx 3\naddx 2\naddx 5\naddx -39\naddx 1\naddx 1\naddx 3\naddx 2\naddx 4\naddx 29\naddx -23\nnoop\naddx -1\naddx 5\nnoop\naddx 11\naddx -10\naddx 5\naddx -1\nnoop\naddx 3\nnoop\naddx 3\naddx 4\nnoop\nnoop\nnoop\nnoop\nnoop")
(parse t)
(part-1 (parse in))
(part-2 (parse in))
)