main
Benjamin Kraft 3 years ago
parent 1d916e940a
commit 1ac455d7a1
  1. 31
      12/12.py
  2. 24
      12/input
  3. 7
      12/testInput

@ -0,0 +1,31 @@
with open("input") as file:
lines = file.read().splitlines()
edges = [set(line.split("-")) for line in lines]
def getAdjacent(knot: str) -> set[str]:
return {edge.difference({knot}).pop() for edge in edges if knot in edge}
def solve():
def find(knot: str, visited: set[str], smallUsedTwice: bool) -> set[tuple[str, ...]]:
if knot == "end":
return {"end"}
foundPaths = set()
newVisited = visited.union({knot}) if knot.islower() else visited
for k in getAdjacent(knot).difference(visited):
if knot.islower() and not smallUsedTwice and knot != "start":
for p in find(k, visited, True):
foundPaths.add((knot, *p))
for p in find(k, newVisited, smallUsedTwice):
foundPaths.add((knot, *p))
return foundPaths
paths1 = find("start", set(), True)
paths2 = find("start", set(), False)
print(len(paths1), len(paths2))
solve()

@ -0,0 +1,24 @@
EG-bj
LN-end
bj-LN
yv-start
iw-ch
ch-LN
EG-bn
OF-iw
LN-yv
iw-TQ
iw-start
TQ-ch
EG-end
bj-OF
OF-end
TQ-start
TQ-bj
iw-LN
EG-ch
yv-iw
KW-bj
OF-ch
bj-ch
yv-TQ

@ -0,0 +1,7 @@
start-A
start-b
A-c
A-b
b-d
A-end
b-end
Loading…
Cancel
Save