59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
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}')
|