Skip to content

Commit f986f06

Browse files
committed
aoc day7
1 parent 0475881 commit f986f06

File tree

2 files changed

+150
-0
lines changed

2 files changed

+150
-0
lines changed

resources/2018/day07

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
Step J must be finished before step H can begin.
2+
Step N must be finished before step C can begin.
3+
Step G must be finished before step P can begin.
4+
Step M must be finished before step I can begin.
5+
Step H must be finished before step X can begin.
6+
Step B must be finished before step Y can begin.
7+
Step C must be finished before step L can begin.
8+
Step F must be finished before step I can begin.
9+
Step V must be finished before step O can begin.
10+
Step W must be finished before step Q can begin.
11+
Step E must be finished before step L can begin.
12+
Step U must be finished before step S can begin.
13+
Step D must be finished before step K can begin.
14+
Step Y must be finished before step X can begin.
15+
Step T must be finished before step R can begin.
16+
Step I must be finished before step K can begin.
17+
Step A must be finished before step K can begin.
18+
Step L must be finished before step X can begin.
19+
Step Q must be finished before step S can begin.
20+
Step S must be finished before step O can begin.
21+
Step P must be finished before step Z can begin.
22+
Step X must be finished before step R can begin.
23+
Step Z must be finished before step O can begin.
24+
Step O must be finished before step K can begin.
25+
Step R must be finished before step K can begin.
26+
Step J must be finished before step W can begin.
27+
Step F must be finished before step V can begin.
28+
Step A must be finished before step X can begin.
29+
Step Z must be finished before step K can begin.
30+
Step M must be finished before step O can begin.
31+
Step X must be finished before step K can begin.
32+
Step E must be finished before step K can begin.
33+
Step J must be finished before step K can begin.
34+
Step E must be finished before step Y can begin.
35+
Step B must be finished before step Q can begin.
36+
Step X must be finished before step Z can begin.
37+
Step D must be finished before step L can begin.
38+
Step N must be finished before step I can begin.
39+
Step N must be finished before step B can begin.
40+
Step V must be finished before step A can begin.
41+
Step H must be finished before step R can begin.
42+
Step N must be finished before step L can begin.
43+
Step U must be finished before step O can begin.
44+
Step A must be finished before step O can begin.
45+
Step V must be finished before step Z can begin.
46+
Step O must be finished before step R can begin.
47+
Step Q must be finished before step P can begin.
48+
Step F must be finished before step Q can begin.
49+
Step P must be finished before step R can begin.
50+
Step S must be finished before step X can begin.
51+
Step J must be finished before step E can begin.
52+
Step V must be finished before step P can begin.
53+
Step M must be finished before step D can begin.
54+
Step I must be finished before step S can begin.
55+
Step Q must be finished before step O can begin.
56+
Step M must be finished before step H can begin.
57+
Step W must be finished before step X can begin.
58+
Step D must be finished before step O can begin.
59+
Step X must be finished before step O can begin.
60+
Step Y must be finished before step Z can begin.
61+
Step F must be finished before step L can begin.
62+
Step V must be finished before step T can begin.
63+
Step V must be finished before step E can begin.
64+
Step Y must be finished before step A can begin.
65+
Step I must be finished before step R can begin.
66+
Step L must be finished before step O can begin.
67+
Step U must be finished before step X can begin.
68+
Step Q must be finished before step X can begin.
69+
Step P must be finished before step X can begin.
70+
Step G must be finished before step C can begin.
71+
Step A must be finished before step L can begin.
72+
Step M must be finished before step U can begin.
73+
Step L must be finished before step S can begin.
74+
Step S must be finished before step P can begin.
75+
Step S must be finished before step K can begin.
76+
Step F must be finished before step T can begin.
77+
Step Q must be finished before step K can begin.
78+
Step G must be finished before step M can begin.
79+
Step G must be finished before step F can begin.
80+
Step T must be finished before step Q can begin.
81+
Step F must be finished before step Z can begin.
82+
Step I must be finished before step Z can begin.
83+
Step N must be finished before step X can begin.
84+
Step J must be finished before step F can begin.
85+
Step W must be finished before step E can begin.
86+
Step M must be finished before step Z can begin.
87+
Step G must be finished before step X can begin.
88+
Step V must be finished before step U can begin.
89+
Step P must be finished before step O can begin.
90+
Step U must be finished before step R can begin.
91+
Step G must be finished before step Z can begin.
92+
Step F must be finished before step R can begin.
93+
Step L must be finished before step R can begin.
94+
Step F must be finished before step A can begin.
95+
Step I must be finished before step O can begin.
96+
Step D must be finished before step T can begin.
97+
Step U must be finished before step L can begin.
98+
Step B must be finished before step S can begin.
99+
Step S must be finished before step Z can begin.
100+
Step J must be finished before step N can begin.
101+
Step H must be finished before step T can begin.

src/adventofcode2018/day07.janet

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
(def input (slurp "../../resources/2018/day07"))
2+
3+
(def nodes @{})
4+
(def edges @{})
5+
6+
# parse input
7+
(def instructions
8+
~{:letter (range "AZ")
9+
:instruction (* "Step " ':letter " must be finished before step " ':letter " can begin.\n")
10+
:main (some (cmt :instruction
11+
,(fn [a b]
12+
(put nodes a true)
13+
(put nodes b true)
14+
(put edges [a b] true))))})
15+
16+
(peg/match instructions input)
17+
18+
19+
(defn start-nodes
20+
"nodes with no incoming edge"
21+
[_nodes _edges]
22+
(let [tmp-nodes (table ;(kvs _nodes))]
23+
(loop [[_ a] :keys _edges]
24+
(put tmp-nodes a nil))
25+
(keys tmp-nodes)))
26+
27+
(defn neighbors [n _edges]
28+
(->> (keys _edges)
29+
(filter (fn [[a _]] (= a n)))
30+
(map last)))
31+
32+
33+
(defn no-incoming? [n _edges]
34+
(empty? (filter (fn [[_ a]] (= a n)) (keys _edges))))
35+
36+
(def q (start-nodes nodes edges))
37+
38+
39+
(def steps @[])
40+
(def tmp-edges (table ;(kvs edges)))
41+
42+
(while (not (empty? q))
43+
(let [n (array/pop (sort q order>))]
44+
(array/push steps n)
45+
(each m (neighbors n edges)
46+
(put tmp-edges [n m] nil)
47+
(if (no-incoming? m tmp-edges) (array/push q m)))))
48+
49+
(pp (string/join steps)) # GJFMDHNBCIVTUWEQYALSPXZORK

0 commit comments

Comments
 (0)