""" Count number of paths through caves """ import pprint from collections import defaultdict def walk_from_node(current_node, path_taken_so_far, visited_small_cave_twice=False): possible_paths = [] for node in caves[current_node]: if node == "start": pass elif node == "end": possible_paths.append(path_taken_so_far + ["end"]) elif node == node.lower() and node in path_taken_so_far: if not visited_small_cave_twice: possible_paths += walk_from_node(node, path_taken_so_far + [current_node], True) else: possible_paths += walk_from_node(node, path_taken_so_far + [current_node], visited_small_cave_twice) return possible_paths caves = defaultdict(set) with open("12_input.txt") as f: for line in f: node_a, node_b = line.strip().split("-") caves[node_a].add(node_b) caves[node_b].add(node_a) walked_paths = walk_from_node("start", []) print(len(walked_paths))