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:
                antenna_map[a_y + (a_y - b_y)][a_x + (a_x - b_x)]['value'] = '#'

            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}')