|
87 | 87 | } |
88 | 88 |
|
89 | 89 |
|
90 | | -def get_num_inputs(output): |
| 90 | +def get_inputs(output, graph, dict_): |
91 | 91 | inputs = [] |
92 | 92 | 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] |
97 | 95 | 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 | + |
112 | 98 |
|
113 | 99 | @cache |
114 | | -def min_length(buttons, n): |
| 100 | +def min_length(seq, n): |
115 | 101 | 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]) |
121 | 105 | 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)) |
123 | 107 |
|
124 | 108 |
|
125 | 109 | def complexity(code, n): |
126 | | - seqs = get_num_inputs(code) |
| 110 | + seqs = get_inputs(code, kp_num, kp_num_moves) |
127 | 111 | min_len = min(min_length(seq, n) for seq in seqs) |
128 | 112 | return min_len*int(code[:-1]) |
129 | 113 |
|
|
0 commit comments