66 lines
1.8 KiB
Python
66 lines
1.8 KiB
Python
from Line import Line
|
|
|
|
|
|
def getHighestIndixes(lines: [Line]):
|
|
currMaxX = 0
|
|
currMaxY = 0
|
|
for line in lines:
|
|
currMaxX = max(currMaxX, max(line.start.x, line.end.x) + 1)
|
|
currMaxY = max(currMaxX, max(line.start.y, line.end.y) + 1)
|
|
return currMaxX, currMaxY
|
|
|
|
|
|
def part1(lines: [Line], arraySize: []):
|
|
area = []
|
|
for x in range(arraySize[0]):
|
|
area.append([])
|
|
area[x] = []
|
|
for y in range(arraySize[1]):
|
|
area[x].append(0)
|
|
|
|
for line in lines:
|
|
if line.axis == "X":
|
|
for y in range(min(line.start.y, line.end.y), max(line.start.y, line.end.y) + 1):
|
|
area[line.start.x][y] += 1
|
|
elif line.axis == "Y":
|
|
for x in range(min(line.start.x, line.end.x), max(line.start.x, line.end.x) + 1):
|
|
area[x][line.start.y] += 1
|
|
elif line.axis == "DIAG":
|
|
if line.start.x > line.end.x:
|
|
y = line.end.y
|
|
else:
|
|
y = line.start.y
|
|
|
|
if y < max(line.start.y, line.end.y):
|
|
op = 1
|
|
else:
|
|
op = -1
|
|
|
|
for x in range(min(line.start.x, line.end.x), max(line.start.x, line.end.x) + 1):
|
|
|
|
area[x][y] += 1
|
|
|
|
y += op
|
|
|
|
danger = 0
|
|
|
|
for row in area:
|
|
for val in row:
|
|
if val > 1:
|
|
danger += 1
|
|
return danger
|
|
|
|
|
|
if __name__ == '__main__':
|
|
lines = []
|
|
with open("input.txt", "r") as f:
|
|
raw = [x.strip() for x in f.readlines()]
|
|
|
|
for i in raw:
|
|
inp = i.replace(" -> ", ", ")
|
|
vals = [int(x) for x in inp.split(",")]
|
|
lines.append(Line(vals[0], vals[1], vals[2], vals[3]))
|
|
if lines[-1].axis == "INVALID":
|
|
lines.pop(-1)
|
|
|
|
print(part1(lines, getHighestIndixes(lines)))
|