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
3 years ago
|
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')
|