lines = [] with open("input") as f: for line in f: lines.append(line.strip()) antennas: dict[str, list[tuple[int, int]]] = {} for row_idx, line in enumerate(lines): for col_idx, char in enumerate(line): if char != ".": if char not in antennas: antennas[char] = [] antennas[char].append((row_idx, col_idx)) row_count = len(lines) col_count = len(lines[0]) antinodes: set[tuple[int, int]] = set() for antenna_list in antennas.values(): for idx, antenna1 in enumerate(antenna_list): for antenna2 in antenna_list[idx + 1:]: row_diff = antenna2[0] - antenna1[0] col_diff = antenna2[1] - antenna1[1] pos1 = (antenna1[0] - row_diff, antenna1[1] - col_diff) pos2 = (antenna2[0] + row_diff, antenna2[1] + col_diff) if 0 <= pos1[0] < row_count and 0 <= pos1[1] < col_count: antinodes.add(pos1) if 0 <= pos2[0] < row_count and 0 <= pos2[1] < col_count: antinodes.add(pos2) print(len(antinodes))