import sys def aa(num): return str(num) if num > 0 else '.' xone = [] xtwo = [] yone = [] ytwo = [] print('Reading ', sys.argv[1]) with open(sys.argv[1], 'r') as f: for i in f.readlines(): inp = i.strip() temp1, temp2 = inp.split(" -> ", 1) tempx1, tempy1 = temp1.split(",") tempx2, tempy2 = temp2.split(",") xone.append(int(tempx1)) xtwo.append(int(tempx2)) yone.append(int(tempy1)) ytwo.append(int(tempy2)) maxx = max(xone + xtwo) maxy = max(yone + ytwo) print('Max x: ', maxx, ', max y: ', maxy) class grid: def __init__(self, maxx, maxy): self._points = [] for i in range(maxy + 1): self._points.append([0] * (maxx + 1)) def mark(self, x, y): self._points[y][x] += 1 def count(self): counter = 0 for i in self._points: for t in i: if t > 1: counter += 1 return counter gri = grid(maxx, maxy) for i in range(len(xone)): if xone[i] == xtwo[i]: poiA = min(yone[i], ytwo[i]) poiB = max(yone[i], ytwo[i]) print('Drawing y line from ', xone[i], ',', poiA, ' to ', xtwo[i], ',', poiB + 1) for t in range(poiA, poiB + 1): gri.mark(xone[i], t) elif yone[i] == ytwo[i]: poiA = min(xone[i], xtwo[i]) poiB = max(xone[i], xtwo[i]) print('Drawing x line from ', poiA, ',', yone[i], ' to ', poiB + 1, ',', ytwo[i]) for t in range(poiA, poiB + 1): gri.mark(t, yone[i]) else: xdir = -1 if xone[i] > xtwo[i] else 1 ydir = -1 if yone[i] > ytwo[i] else 1 xcoords = list(range(xone[i], xtwo[i] + xdir, xdir)) ycoords = list(range(yone[i], ytwo[i] + ydir, ydir)) #print(ycoords) #print(xcoords) for x, y in zip(xcoords, ycoords): gri.mark(x, y) # Print the grid as ASCII art. for p in gri._points: print(''.join([aa(x) for x in p])) solu = gri.count() print(solu, ' intersections found')