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

This commit is contained in:
2021-12-13 08:12:53 +01:00
parent 577725fd54
commit cceb733667

View File

@@ -5,13 +5,12 @@ from pathlib import Path
def process_node(node, available_edges, visited): def process_node(node, available_edges, visited):
paths = [] paths = []
if node == "end": if node == "end":
return [[node]] paths.append([node])
return paths
if node.islower(): if node.islower():
visited.add(node) visited.add(node)
neighbors = [[n for n in e if n != node] neighbors = [n for e in available_edges if node in e for n in e if n != node]
for e in available_edges if node in e]
for n in neighbors: for n in neighbors:
n = n[0]
if n not in visited: if n not in visited:
next = process_node(n, available_edges, visited) next = process_node(n, available_edges, visited)
for p in next: for p in next:
@@ -24,7 +23,8 @@ def process_node(node, available_edges, visited):
def process_node_twice(node, available_edges, visited, twice): def process_node_twice(node, available_edges, visited, twice):
paths = [] paths = []
if node == "end": if node == "end":
return [[node]] paths.append([node])
return paths
if node.islower(): if node.islower():
if node in visited and twice: if node in visited and twice:
return paths return paths
@@ -32,16 +32,14 @@ def process_node_twice(node, available_edges, visited, twice):
twice = node twice = node
else: else:
visited.add(node) visited.add(node)
neighbors = [[n for n in e if n != node] neighbors = [n for e in available_edges if node in e for n in e if n != node]
for e in available_edges if node in e]
for n in neighbors: for n in neighbors:
n = n[0]
if n not in visited or twice != node and n != "start": if n not in visited or twice != node and n != "start":
next = process_node_twice(n, available_edges, visited, twice) next = process_node_twice(n, available_edges, visited, twice)
for p in next: for p in next:
paths.append([node] + p) paths.append([node] + p)
if twice == node: if twice == node:
twice = "" twice = None
elif node in visited: elif node in visited:
visited.remove(node) visited.remove(node)
return paths return paths
@@ -66,7 +64,7 @@ def part_2(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.append(e)
paths = process_node_twice("start", edges, set(), "") paths = process_node_twice("start", edges, set(), None)
result = len(paths) result = len(paths)
print("Part 2 result:", result) print("Part 2 result:", result)