import sys
import os
sys.path.insert(1, os.path.abspath('../../'))
from python_tools.aoc_utils import *
import collections as C
import math

G = C.defaultdict(list)
A = set()
B = set()
limits = [0,0]

def add_antinodesp1(pos1, pos2):
    N1 = [2*pos1[0]-pos2[0], 2*pos1[1]-pos2[1]]
    if 0 <= N1[0] < limits[0] and 0 <= N1[1] < limits[1]:
        A.add(tuple(N1))

def add_antinodesp2(pos1, pos2):
    diff = [pos1[0]-pos2[0], pos1[1]-pos2[1]]
    step = 1
    N1 = [pos1[0]- step*diff[0], pos1[1]-step*diff[1]]
    while 0 <= N1[0] < limits[0] and 0 <= N1[1] < limits[1]:
        B.add(tuple(N1))
        step+=1
        N1 = [pos1[0]- step*diff[0], pos1[1]-step*diff[1]]


def part_one(g):
    for i in g:
        for j in range(len(g[i])-1):
            for k in range(j+1, len(g[i])):
                add_antinodesp1(g[i][j], g[i][k])
                add_antinodesp1(g[i][k], g[i][j])
    print("Part1: ", len(A))

def part_two(g):
    for i in g:
        for j in range(len(g[i])-1):
            for k in range(j+1, len(g[i])):
                add_antinodesp2(g[i][j], g[i][k])
                add_antinodesp2(g[i][k], g[i][j])
    print("Part2: ", len(B))

def main():
    contents = file2listoflists("test.txt")
    limits[0] = len(contents)
    limits[1] = len(contents[0])
    for row, line in enumerate(contents):
        for col, character in enumerate(line):
            if character != '.':
                G[character].append([row, col])
    # print(G)
    part_one(G)
    part_two(G)

    # for i in A:
    #     contents[i[0]][i[1]] = '#'
    # for i in contents:
    #     print(''.join(i))


if __name__ == "__main__":
    main()