#!/usr/bin/env python # 2021 - Advent Of Code - 12 def parse_file(file): with open(file) as f: return [x.strip() for x in f.readlines()] def explore_tree(current_node, visited, paths_list, gen): possible_path = [c for c in connections if current_node in c.split('-')] print(f'\n{gen} current_node: {current_node}\t possible path: {possible_path}') print(f'{gen} visited: {visited}') for path in possible_path: print(f'{gen} exploring {path}') new_visited = list(visited) # check end if 'end' in path: visited.append('end') paths_list.append(visited) print(f'{gen} keeping path: {visited}') continue nodes = path.split('-') if nodes[0] == current_node: if nodes[1] not in visited or nodes[1].isupper(): print(f'{gen} destination: {nodes[1]}') new_visited.append(nodes[1]) explore_tree(nodes[1], list(new_visited), paths_list, gen+1) else: print(f'{gen} removing dest: {nodes[1]}') else: if nodes[0] not in visited or nodes[0].isupper(): print(f'{gen} destination: {nodes[0]}') new_visited.append(nodes[0]) explore_tree(nodes[0], list(new_visited), paths_list, gen+1) else: print(f'{gen} removing dest: {nodes[0]}') connections = parse_file('input.txt') print(f'connections: {connections}') points = set() for conn in connections: p = conn.split('-') points.add(p[0]) points.add(p[1]) print(f'unique points: {points}') print() starting_positions = [c for c in connections if 'start' in c] ending_positions = [c for c in connections if 'end' in c] visited_nodes = ['start'] all_path = [] explore_tree('start', visited_nodes, all_path, 0) print() print('listing all paths') for p in all_path: print(p) print(f'{len(all_path)} paths')