diff --git a/day-12/day-12.py b/day-12/day-12.py index b201f47..78dbd24 100644 --- a/day-12/day-12.py +++ b/day-12/day-12.py @@ -5,13 +5,12 @@ from pathlib import Path def process_node(node, available_edges, visited): paths = [] if node == "end": - return [[node]] + paths.append([node]) + return paths if node.islower(): visited.add(node) - neighbors = [[n for n in e if n != node] - for e in available_edges if node in e] + neighbors = [n for e in available_edges if node in e for n in e if n != node] for n in neighbors: - n = n[0] if n not in visited: next = process_node(n, available_edges, visited) for p in next: @@ -24,7 +23,8 @@ def process_node(node, available_edges, visited): def process_node_twice(node, available_edges, visited, twice): paths = [] if node == "end": - return [[node]] + paths.append([node]) + return paths if node.islower(): if node in visited and twice: return paths @@ -32,16 +32,14 @@ def process_node_twice(node, available_edges, visited, twice): twice = node else: visited.add(node) - neighbors = [[n for n in e if n != node] - for e in available_edges if node in e] + neighbors = [n for e in available_edges if node in e for n in e if n != node] for n in neighbors: - n = n[0] if n not in visited or twice != node and n != "start": next = process_node_twice(n, available_edges, visited, twice) for p in next: paths.append([node] + p) if twice == node: - twice = "" + twice = None elif node in visited: visited.remove(node) return paths @@ -66,7 +64,7 @@ def part_2(input): n_start, n_end = line.strip().split('-') e = (n_start, n_end) edges.append(e) - paths = process_node_twice("start", edges, set(), "") + paths = process_node_twice("start", edges, set(), None) result = len(paths) print("Part 2 result:", result)