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
Try using set for available edges
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user