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

Speed up a little and rename argument twice to visited_twice
This commit is contained in:
2021-12-13 08:26:11 +01:00
parent cceb733667
commit ae8d3f0d97

View File

@@ -12,34 +12,32 @@ def process_node(node, available_edges, visited):
neighbors = [n for e in available_edges if node in e 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 n in neighbors: for n in neighbors:
if n not in visited: if n not in visited:
next = process_node(n, available_edges, visited) nxt = process_node(n, available_edges, visited)
for p in next: paths = [[node] + p for p in nxt]
paths.append([node] + p)
if node in visited: if node in visited:
visited.remove(node) visited.remove(node)
return paths return paths
def process_node_twice(node, available_edges, visited, twice): def process_node_twice(node, available_edges, visited, visited_twice):
paths = [] paths = []
if node == "end": if node == "end":
paths.append([node]) paths.append([node])
return paths return paths
if node.islower(): if node.islower():
if node in visited and twice: if node in visited and visited_twice:
return paths return paths
elif node in visited and node != "start": elif node in visited and node != "start":
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 available_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 twice != node and n != "start": if n not in visited or visited_twice != node and n != "start":
next = process_node_twice(n, available_edges, visited, twice) nxt = process_node_twice(n, available_edges, visited, visited_twice)
for p in next: paths = [[node] + p for p in nxt]
paths.append([node] + p) if visited_twice == node:
if twice == node: visited_twice = None
twice = None
elif node in visited: elif node in visited:
visited.remove(node) visited.remove(node)
return paths return paths