#!/usr/bin/env python3 # -*- coding: utf-8 -*- file = "./input.txt" # file = "./ex.txt" from copy import deepcopy import sys sys.setrecursionlimit(6500) from time import time start = time() def guard_position(game_field) -> (int, int): for li in range(game_field_lines): for ro in range(game_field_rows): if game_field[li][ro] == '^': print(f'GuardPosition: line:{li}, row:{ro}') return li, ro def go_up(gl, gr, game_field): game_field[gl][gr] = 'X' if gl == 0: count_fields() elif game_field[gl-1][gr] == '#': go_right(gl, gr, game_field) else: gl -= 1 go_up(gl, gr, game_field) def go_right(gl, gr, game_field): game_field[gl][gr] = 'X' if gr == game_field_rows-1: count_fields() elif game_field[gl][gr+1] == '#': go_down(gl, gr, game_field) else: gr += 1 go_right(gl, gr, game_field) def go_down(gl, gr, game_field): game_field[gl][gr] = 'X' if gl == game_field_lines-1: count_fields() elif game_field[gl+1][gr] == '#': go_left(gl, gr, game_field) else: gl += 1 go_down(gl, gr, game_field) def go_left(gl, gr, game_field): game_field[gl][gr] = 'X' if gr == 0: count_fields() elif game_field[gl][gr-1] == '#': go_up(gl, gr, game_field) else: gr -= 1 go_left(gl, gr, game_field) def count_fields(): pass if __name__ == "__main__": field = [] input_file = open(file, "r") for line in input_file: line = line.strip() if line == "": continue tmp = [] for b in line: tmp.append(b) field.append(tmp) input_file.close() #print_game_field() game_field_lines, game_field_rows = len(field), len(field[0]) gl_start, gr_start = guard_position(field) go_up(gl_start, gr_start, field) rec_errors = 0 for i in range(game_field_lines): for j in range(game_field_rows): if field[i][j] != 'X': continue f = deepcopy(field) f[i][j] = "#" try: go_up(gl_start, gr_start, f) except RecursionError: rec_errors += 1 print(rec_errors) print(f'runtime for script: {time()-start:.2f} s')