def ptAdd(pt1,pt2): return [pt1[0]+pt2[0],pt1[1]+pt2[1]] def ptSub(pt1,pt2): return [pt1[0]-pt2[0],pt1[1]-pt2[1]] def antennae(arr): out = {} for i in range(0,len(arr)): for j in range(0,len(arr[i])): if arr[i][j] != ".": if arr[i][j] in out: out[arr[i][j]].append([i,j]) else: out[arr[i][j]] = [[i,j]] return out def antinodes(antennae): out = [] for a in antennae: for i in range(0,len(antennae[a])): for j in range(i+1,len(antennae[a])): pt1 = antennae[a][i] pt2 = antennae[a][j] an1 = ptAdd(pt1,ptSub(pt1,pt2)) an2 = ptAdd(pt2,ptSub(pt2,pt1)) if an2 not in out and an2[0] >= 0 and an2[1] >= 0 and an2[0] < 50 and an2[1] < 50: out.append(an2) if an1 not in out and an1[0] >= 0 and an1[1] >= 0 and an1[0] < 50 and an1[1] < 50: out.append(an1) return out def resonantAntinodes(antennae): out = [] for a in antennae: for i in range(0,len(antennae[a])): for j in range(i+1,len(antennae[a])): pt1 = antennae[a][i] pt2 = antennae[a][j] an1 = ptAdd(pt1, ptSub(pt1, pt2)) while an1[0] >= 0 and an1[1] >= 0 and an1[0] < 50 and an1[1] < 50: if not an1 in out: out.append(pt1) an1 = ptAdd(an1, ptSub(an1, pt2)) an2 = ptAdd(pt2,ptSub(pt2,pt1)) while an2[0] >= 0 and an2[1] >= 0 and an2[0] < 50 and an2[1] < 50: if not an2 in out: out.append(pt2) an2 = ptAdd(an2, ptSub(an2, pt1)) return out arr = [] with open("input08.txt") as file: for line in file: arr.append([]) for a in line[:-1]: arr[-1].append(a) print(len(antinodes(antennae(arr)))) print(len(resonantAntinodes(antennae(arr))))