import time start_time = time.time() with open('puzzle.txt', 'r') as f: lines = f.read().splitlines() total_antinodes = 0 antenna_map = {} for line_index, line in enumerate(lines): for column_index, column in enumerate(list(line)): if line_index not in antenna_map: antenna_map[line_index] = {} if column_index not in antenna_map[line_index]: antenna_map[line_index][column_index] = { 'value': line[column_index], } antenna_coordinates = {} for line in antenna_map: for column in antenna_map[line]: if antenna_map[line][column]['value'] != '.': if not antenna_map[line][column]['value'] in antenna_coordinates: antenna_coordinates[antenna_map[line][column]['value']] = [[line, column]] else: antenna_coordinates[antenna_map[line][column]['value']].append([line, column]) for antenna in antenna_coordinates: for index_a, antenna_a_coords in enumerate(antenna_coordinates[antenna]): a_y, a_x = antenna_a_coords for index_b, antenna_b_coords in enumerate( antenna_coordinates[antenna][:index_a] + antenna_coordinates[antenna][index_a + 1:]): b_y, b_x = antenna_b_coords try: iter = 1 while True: antenna_map[a_y + (b_y - a_y) * iter][a_x + (b_x - a_x) * iter]['value'] = '#' iter += 1 except KeyError: continue map_string = "" for line in antenna_map: for column in antenna_map[line]: map_string += antenna_map[line][column]['value'] if antenna_map[line][column]['value'] == '#': total_antinodes += 1 map_string += "\n" print(map_string) print(total_antinodes) print(f'Total time: {time.time() - start_time}')