diff --git a/2021/day12.py b/2021/day12.py new file mode 100644 index 0000000..cf14dfb --- /dev/null +++ b/2021/day12.py @@ -0,0 +1,38 @@ +from collections import defaultdict +from string import ascii_lowercase + +with open("input12.txt") as f: + lines = [line.rstrip() for line in f] +cxs = defaultdict(list) +for a, b in map(lambda s: s.split("-"), lines): + cxs[a].append(b) + cxs[b].append(a) + + +def walk(path, skip_f): + if path[-1] == "end": + return [path] + valid_paths = [] + for cave in filter(lambda c: c != "start", cxs[path[-1]]): + if skip_f(cave, path): + continue + valid_paths += walk(path + [cave], skip_f) + return valid_paths + + +def skip1(cave, path): + return cave[0] in ascii_lowercase and cave in path + + +def skip2(cave, path): + return ( + skip1(cave, path) + and any( + path.count(c) > 1 + for c in filter(lambda c: c[0] in ascii_lowercase, path) + ) + ) + + +print(len(walk(["start"], skip1))) +print(len(walk(["start"], skip2)))