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

This commit is contained in:
2021-12-12 22:10:55 +01:00
parent a5229f5209
commit 0473bf6da2
2 changed files with 103 additions and 0 deletions

79
day-12/day-12.py Normal file
View File

@@ -0,0 +1,79 @@
#!/usr/bin/env python3
from pathlib import Path
def process_node(node, available_edges, visited):
paths = []
if node == "end":
return [[node]]
if node.islower():
visited.add(node)
neighbors = [[n for n in e if n != node]
for e in available_edges if node in e]
for n in neighbors:
n = n[0]
if n not in visited:
next = process_node(n, available_edges, visited)
for p in next:
paths.append([node] + p)
if node in visited:
visited.remove(node)
return paths
def process_node_twice(node, available_edges, visited, twice):
paths = []
if node == "end":
return [[node]]
if node.islower():
if node in visited and twice:
return paths
elif node in visited and node != "start":
twice = node
else:
visited.add(node)
neighbors = [[n for n in e if n != node]
for e in available_edges if node in e]
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 = ""
elif node in visited:
visited.remove(node)
return paths
def part_1(input):
result = 0
edges = []
for line in input:
n_start, n_end = line.strip().split('-')
e = (n_start, n_end)
edges.append(e)
paths = process_node("start", edges, set())
result = len(paths)
print("Part 1 result:", result)
def part_2(input):
result = 0
edges = []
for line in input:
n_start, n_end = line.strip().split('-')
e = (n_start, n_end)
edges.append(e)
paths = process_node_twice("start", edges, set(), "")
result = len(paths)
print("Part 2 result:", result)
input = list()
p = Path(__file__).with_name('input.txt')
with open(p) as f:
input = f.readlines()
part_1(input)
part_2(input)