day12
This commit is contained in:
parent
67479e5045
commit
457be373ff
54
day12.py
Normal file
54
day12.py
Normal file
@ -0,0 +1,54 @@
|
||||
from tools.aoc import AOCDay
|
||||
from typing import Any, Dict, List
|
||||
|
||||
|
||||
def getCaveMap(lines: List[List[str]]) -> Dict[str, List[str]]:
|
||||
m = {}
|
||||
for l in lines:
|
||||
if l[0] in m:
|
||||
m[l[0]].append(l[1])
|
||||
else:
|
||||
m[l[0]] = [l[1]]
|
||||
|
||||
if l[1] in m:
|
||||
m[l[1]].append(l[0])
|
||||
else:
|
||||
m[l[1]] = [l[0]]
|
||||
|
||||
return m
|
||||
|
||||
|
||||
def getPaths(caveMap: Dict[str, List[str]], start: str, visited: List[str], noDouble: bool = True) -> List[List[str]]:
|
||||
paths = []
|
||||
visited.append(start)
|
||||
for thisCave in caveMap[start]:
|
||||
if thisCave == 'start':
|
||||
continue
|
||||
|
||||
if thisCave == 'end':
|
||||
paths.append(['end'])
|
||||
continue
|
||||
|
||||
foundDouble = False
|
||||
if thisCave.islower() and thisCave in visited:
|
||||
if noDouble:
|
||||
continue
|
||||
foundDouble = True
|
||||
|
||||
sub_paths = getPaths(caveMap, thisCave, visited.copy(), noDouble or foundDouble)
|
||||
[paths.append(x) for x in sub_paths if 'end' in x]
|
||||
|
||||
return paths
|
||||
|
||||
|
||||
class Day(AOCDay):
|
||||
test_solutions_p1 = [10, 19, 226, 5076]
|
||||
test_solutions_p2 = [36, 103, 3509, 145643]
|
||||
|
||||
def part1(self) -> Any:
|
||||
caveMap = getCaveMap(self.getInputAsArraySplit("-"))
|
||||
return len(getPaths(caveMap, 'start', []))
|
||||
|
||||
def part2(self) -> Any:
|
||||
caveMap = getCaveMap(self.getInputAsArraySplit("-"))
|
||||
return len(getPaths(caveMap, 'start', [], False))
|
||||
22
inputs/input12
Normal file
22
inputs/input12
Normal file
@ -0,0 +1,22 @@
|
||||
end-MY
|
||||
MY-xc
|
||||
ho-NF
|
||||
start-ho
|
||||
NF-xc
|
||||
NF-yf
|
||||
end-yf
|
||||
xc-TP
|
||||
MY-qo
|
||||
yf-TP
|
||||
dc-NF
|
||||
dc-xc
|
||||
start-dc
|
||||
yf-MY
|
||||
MY-ho
|
||||
EM-uh
|
||||
xc-yf
|
||||
ho-dc
|
||||
uh-NF
|
||||
yf-ho
|
||||
end-uh
|
||||
start-NF
|
||||
7
inputs/test_input12_1_0
Normal file
7
inputs/test_input12_1_0
Normal file
@ -0,0 +1,7 @@
|
||||
start-A
|
||||
start-b
|
||||
A-c
|
||||
A-b
|
||||
b-d
|
||||
A-end
|
||||
b-end
|
||||
10
inputs/test_input12_1_1
Normal file
10
inputs/test_input12_1_1
Normal file
@ -0,0 +1,10 @@
|
||||
dc-end
|
||||
HN-start
|
||||
start-kj
|
||||
dc-start
|
||||
dc-HN
|
||||
LN-dc
|
||||
HN-end
|
||||
kj-sa
|
||||
kj-HN
|
||||
kj-dc
|
||||
18
inputs/test_input12_1_2
Normal file
18
inputs/test_input12_1_2
Normal file
@ -0,0 +1,18 @@
|
||||
fs-end
|
||||
he-DX
|
||||
fs-he
|
||||
start-DX
|
||||
pj-DX
|
||||
end-zg
|
||||
zg-sl
|
||||
zg-pj
|
||||
pj-he
|
||||
RW-he
|
||||
fs-DX
|
||||
pj-RW
|
||||
zg-RW
|
||||
start-pj
|
||||
he-WI
|
||||
zg-he
|
||||
pj-fs
|
||||
start-RW
|
||||
22
inputs/test_input12_1_3
Normal file
22
inputs/test_input12_1_3
Normal file
@ -0,0 +1,22 @@
|
||||
end-MY
|
||||
MY-xc
|
||||
ho-NF
|
||||
start-ho
|
||||
NF-xc
|
||||
NF-yf
|
||||
end-yf
|
||||
xc-TP
|
||||
MY-qo
|
||||
yf-TP
|
||||
dc-NF
|
||||
dc-xc
|
||||
start-dc
|
||||
yf-MY
|
||||
MY-ho
|
||||
EM-uh
|
||||
xc-yf
|
||||
ho-dc
|
||||
uh-NF
|
||||
yf-ho
|
||||
end-uh
|
||||
start-NF
|
||||
7
inputs/test_input12_2_0
Normal file
7
inputs/test_input12_2_0
Normal file
@ -0,0 +1,7 @@
|
||||
start-A
|
||||
start-b
|
||||
A-c
|
||||
A-b
|
||||
b-d
|
||||
A-end
|
||||
b-end
|
||||
10
inputs/test_input12_2_1
Normal file
10
inputs/test_input12_2_1
Normal file
@ -0,0 +1,10 @@
|
||||
dc-end
|
||||
HN-start
|
||||
start-kj
|
||||
dc-start
|
||||
dc-HN
|
||||
LN-dc
|
||||
HN-end
|
||||
kj-sa
|
||||
kj-HN
|
||||
kj-dc
|
||||
18
inputs/test_input12_2_2
Normal file
18
inputs/test_input12_2_2
Normal file
@ -0,0 +1,18 @@
|
||||
fs-end
|
||||
he-DX
|
||||
fs-he
|
||||
start-DX
|
||||
pj-DX
|
||||
end-zg
|
||||
zg-sl
|
||||
zg-pj
|
||||
pj-he
|
||||
RW-he
|
||||
fs-DX
|
||||
pj-RW
|
||||
zg-RW
|
||||
start-pj
|
||||
he-WI
|
||||
zg-he
|
||||
pj-fs
|
||||
start-RW
|
||||
22
inputs/test_input12_2_3
Normal file
22
inputs/test_input12_2_3
Normal file
@ -0,0 +1,22 @@
|
||||
end-MY
|
||||
MY-xc
|
||||
ho-NF
|
||||
start-ho
|
||||
NF-xc
|
||||
NF-yf
|
||||
end-yf
|
||||
xc-TP
|
||||
MY-qo
|
||||
yf-TP
|
||||
dc-NF
|
||||
dc-xc
|
||||
start-dc
|
||||
yf-MY
|
||||
MY-ho
|
||||
EM-uh
|
||||
xc-yf
|
||||
ho-dc
|
||||
uh-NF
|
||||
yf-ho
|
||||
end-uh
|
||||
start-NF
|
||||
Loading…
Reference in New Issue
Block a user