Skip to content

Commit 1daaadf

Browse files
committed
Clean up solution
1 parent f16a8ad commit 1daaadf

File tree

1 file changed

+11
-27
lines changed

1 file changed

+11
-27
lines changed

2024/day21/solution.py

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -87,43 +87,27 @@
8787
}
8888

8989

90-
def get_num_inputs(output):
90+
def get_inputs(output, graph, dict_):
9191
inputs = []
9292
for x, y in zip("A" + output, output):
93-
sub_inputs = []
94-
paths = nx.all_shortest_paths(kp_num, x, y)
95-
for path in paths:
96-
sub_inputs.append("".join(kp_num_moves[(u, v)] for u, v in zip(path, path[1:])) + "A")
93+
paths = nx.all_shortest_paths(graph, x, y)
94+
sub_inputs = ["".join(dict_[(u, v)] for u, v in zip(path, path[1:])) + "A" for path in paths]
9795
inputs.append(sub_inputs)
98-
99-
return [''.join(s) for s in product(*inputs)]
100-
101-
102-
def get_dir_inputs(output):
103-
inputs = []
104-
for x, y in zip("A" + output, output):
105-
sub_inputs = []
106-
paths = nx.all_shortest_paths(kp_dir, x, y)
107-
for path in paths:
108-
sub_inputs.append("".join(kp_dir_moves[(u, v)] for u, v in zip(path, path[1:])) + "A")
109-
inputs.append(sub_inputs)
110-
return [''.join(s) for s in product(*inputs)]
111-
96+
return [''.join(s) for s in product(*inputs)]
97+
11298

11399
@cache
114-
def min_length(buttons, n):
100+
def min_length(seq, n):
115101
if n == 0:
116-
return len(buttons)
117-
assert buttons[-1] == "A"
118-
if buttons.count("A") > 1:
119-
ls = [x + "A" for x in buttons.split("A")][:-1]
120-
return sum(min_length(pt, n) for pt in ls)
102+
return len(seq)
103+
if seq.count("A") > 1:
104+
return sum(min_length(pt, n) for pt in [x + "A" for x in seq.split("A")][:-1])
121105
else:
122-
return min(min_length(x, n - 1) for x in get_dir_inputs(buttons))
106+
return min(min_length(x, n - 1) for x in get_inputs(seq, kp_dir, kp_dir_moves))
123107

124108

125109
def complexity(code, n):
126-
seqs = get_num_inputs(code)
110+
seqs = get_inputs(code, kp_num, kp_num_moves)
127111
min_len = min(min_length(seq, n) for seq in seqs)
128112
return min_len*int(code[:-1])
129113

0 commit comments

Comments
 (0)