You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.0 KiB
75 lines
2.0 KiB
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') |