From d2d338ab16cb618d046d906a04834840b631343d Mon Sep 17 00:00:00 2001 From: Pascal Lais Date: Mon, 13 Dec 2021 09:35:50 +0100 Subject: [PATCH] Update day 12 solution Try using set for available edges --- day-12/day-12.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/day-12/day-12.py b/day-12/day-12.py index 4ac07f6..70980d4 100644 --- a/day-12/day-12.py +++ b/day-12/day-12.py @@ -2,22 +2,22 @@ from pathlib import Path -def process_node(node, available_edges, visited): +def process_node(node, edges, visited): num_paths = 0 if node == "end": return 1 if node.islower(): visited.add(node) - neighbors = [n for e in available_edges if node in e for n in e if n != node] + neighbors = [n for e in edges if node in e for n in e if n != node] for n in neighbors: if n not in visited: - num_paths += process_node(n, available_edges, visited) + num_paths += process_node(n, edges, visited) if node in visited: visited.remove(node) return num_paths -def process_node_twice(node, available_edges, visited, visited_twice): +def process_node_twice(node, edges, visited, visited_twice): num_paths = 0 if node == "end": return 1 @@ -28,10 +28,10 @@ def process_node_twice(node, available_edges, visited, visited_twice): visited_twice = node else: visited.add(node) - neighbors = [n for e in available_edges if node in e for n in e if n != node] + neighbors = [n for e in edges if node in e for n in e if n != node] for n in neighbors: if n not in visited or visited_twice != node and n != "start": - num_paths += process_node_twice(n, available_edges, visited, visited_twice) + num_paths += process_node_twice(n, edges, visited, visited_twice) if visited_twice == node: visited_twice = None elif node in visited: @@ -41,22 +41,22 @@ def process_node_twice(node, available_edges, visited, visited_twice): def part_1(input): result = 0 - edges = [] + edges = set() for line in input: n_start, n_end = line.strip().split('-') e = (n_start, n_end) - edges.append(e) + edges.add(e) result = process_node("start", edges, set()) print("Part 1 result:", result) def part_2(input): result = 0 - edges = [] + edges = set() for line in input: n_start, n_end = line.strip().split('-') e = (n_start, n_end) - edges.append(e) + edges.add(e) result = process_node_twice("start", edges, set(), None) print("Part 2 result:", result)