From b3234118daac9a724c122edc69dcdb7c5c205bb7 Mon Sep 17 00:00:00 2001 From: kleph Date: Mon, 13 Dec 2021 04:40:26 +0100 Subject: [PATCH] Day 12 part 1 --- 12/12.py | 68 +++++++++++++++++++++++++++++++++++++++++++ 12/input.txt | 26 +++++++++++++++++ 12/input_example1.txt | 7 +++++ 12/input_example2.txt | 10 +++++++ 12/input_example3.txt | 18 ++++++++++++ 5 files changed, 129 insertions(+) create mode 100755 12/12.py create mode 100644 12/input.txt create mode 100644 12/input_example1.txt create mode 100644 12/input_example2.txt create mode 100644 12/input_example3.txt diff --git a/12/12.py b/12/12.py new file mode 100755 index 0000000..26d1f4a --- /dev/null +++ b/12/12.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python +# 2021 - Advent Of Code - 11 + +GRID_SIZE = 10 + + +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(f'listing all paths') +for p in all_path: + print(p) + +print(f'{len(all_path)} paths') diff --git a/12/input.txt b/12/input.txt new file mode 100644 index 0000000..101ce3a --- /dev/null +++ b/12/input.txt @@ -0,0 +1,26 @@ +end-ry +jf-jb +jf-IO +jb-hz +jo-LM +hw-end +hw-LM +hz-ry +WI-start +LM-start +kd-jf +xi-WI +hw-jb +hz-jf +LM-jb +jb-xi +ry-jf +WI-jb +end-hz +jo-start +WI-jo +xi-ry +xi-LM +xi-hw +jo-xi +WI-jf diff --git a/12/input_example1.txt b/12/input_example1.txt new file mode 100644 index 0000000..6fd8c41 --- /dev/null +++ b/12/input_example1.txt @@ -0,0 +1,7 @@ +start-A +start-b +A-c +A-b +b-d +A-end +b-end diff --git a/12/input_example2.txt b/12/input_example2.txt new file mode 100644 index 0000000..62cc714 --- /dev/null +++ b/12/input_example2.txt @@ -0,0 +1,10 @@ +dc-end +HN-start +start-kj +dc-start +dc-HN +LN-dc +HN-end +kj-sa +kj-HN +kj-dc diff --git a/12/input_example3.txt b/12/input_example3.txt new file mode 100644 index 0000000..65f3833 --- /dev/null +++ b/12/input_example3.txt @@ -0,0 +1,18 @@ +fs-end +he-DX +fs-he +start-DX +pj-DX +end-zg +zg-sl +zg-pj +pj-he +RW-he +fs-DX +pj-RW +zg-RW +start-pj +he-WI +zg-he +pj-fs +start-RW