Update day 12 solution
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user