38 lines
812 B
Python
38 lines
812 B
Python
#!/usr/bin/env python3
|
|
|
|
from common import parse_file, cave_is_small
|
|
|
|
|
|
def search_paths(cave_system, cave="start", marked = set(), paths = [], path = [], revisit = True):
|
|
path = [*path, cave]
|
|
|
|
if cave == "end":
|
|
return [*paths, path]
|
|
|
|
if cave_is_small(cave):
|
|
if cave in marked and revisit:
|
|
revisit = False
|
|
|
|
marked.add(cave)
|
|
|
|
for connected_cave in cave_system[cave]:
|
|
if connected_cave == "start":
|
|
continue
|
|
|
|
if connected_cave in marked and not revisit:
|
|
continue
|
|
|
|
paths = search_paths(cave_system, connected_cave, set(marked), paths, path, revisit)
|
|
|
|
return paths
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import sys
|
|
|
|
cave_system = parse_file(sys.argv[1])
|
|
|
|
paths = search_paths(cave_system)
|
|
|
|
print(len(paths))
|