advent_of_code/12/12.py
kleph ba86d90e98
Some checks failed
continuous-integration/drone/push Build is failing
lint (W1514)
2022-04-05 13:56:34 +02:00

66 lines
1.9 KiB
Python
Executable file

#!/usr/bin/env python
# 2021 - Advent Of Code - 12
def parse_file(file):
with open(file, encoding="utf-8") 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')