Update day 12 solution
All checks were successful
continuous-integration/drone/push Build is passing

Try using set for available edges
This commit is contained in:
2021-12-13 09:35:50 +01:00
parent 801e4747a2
commit d2d338ab16

View File

@@ -2,22 +2,22 @@
from pathlib import Path from pathlib import Path
def process_node(node, available_edges, visited): def process_node(node, edges, visited):
num_paths = 0 num_paths = 0
if node == "end": if node == "end":
return 1 return 1
if node.islower(): if node.islower():
visited.add(node) 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: for n in neighbors:
if n not in visited: if n not in visited:
num_paths += process_node(n, available_edges, visited) num_paths += process_node(n, edges, visited)
if node in visited: if node in visited:
visited.remove(node) visited.remove(node)
return num_paths 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 num_paths = 0
if node == "end": if node == "end":
return 1 return 1
@@ -28,10 +28,10 @@ def process_node_twice(node, available_edges, visited, visited_twice):
visited_twice = node visited_twice = node
else: else:
visited.add(node) 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: for n in neighbors:
if n not in visited or visited_twice != node and n != "start": 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: if visited_twice == node:
visited_twice = None visited_twice = None
elif node in visited: elif node in visited:
@@ -41,22 +41,22 @@ def process_node_twice(node, available_edges, visited, visited_twice):
def part_1(input): def part_1(input):
result = 0 result = 0
edges = [] edges = set()
for line in input: for line in input:
n_start, n_end = line.strip().split('-') n_start, n_end = line.strip().split('-')
e = (n_start, n_end) e = (n_start, n_end)
edges.append(e) edges.add(e)
result = process_node("start", edges, set()) result = process_node("start", edges, set())
print("Part 1 result:", result) print("Part 1 result:", result)
def part_2(input): def part_2(input):
result = 0 result = 0
edges = [] edges = set()
for line in input: for line in input:
n_start, n_end = line.strip().split('-') n_start, n_end = line.strip().split('-')
e = (n_start, n_end) e = (n_start, n_end)
edges.append(e) edges.add(e)
result = process_node_twice("start", edges, set(), None) result = process_node_twice("start", edges, set(), None)
print("Part 2 result:", result) print("Part 2 result:", result)