|
|
@ -42,7 +42,6 @@ class Chart: |
|
|
|
vents: List = None |
|
|
|
|
|
|
|
def __init__(self, vents: List[VolcanicVent], diagnals: bool = True) -> None: |
|
|
|
self.chart = defaultdict(int) |
|
|
|
self.vents = vents |
|
|
|
self._generate_chart(diagnals=diagnals) |
|
|
|
|
|
|
@ -59,22 +58,22 @@ class Chart: |
|
|
|
.......... |
|
|
|
222111.... 0,9 -> 5,9 0,9 -> 2,9 |
|
|
|
""" |
|
|
|
vents = self.vents.copy() |
|
|
|
for vent in vents: |
|
|
|
self.chart = defaultdict(int) |
|
|
|
for vent in self.vents: |
|
|
|
if vent.direction != "diagnal": |
|
|
|
self._chart_line_horiz_vert(vent.start, vent.end) |
|
|
|
elif diagnals: |
|
|
|
self._chart_line_diagnal(vent.start, vent.end) |
|
|
|
|
|
|
|
def _chart_line_diagnal(self, start: Location, end: Location) -> None: |
|
|
|
if end.x > start.x: # direction: left |
|
|
|
if end.x > start.x: # direction: left |
|
|
|
x_range = range(start.x, end.x + 1) |
|
|
|
else: # direction: right |
|
|
|
x_range = range(start.x, end.x - 1, -1) # reverse range |
|
|
|
if end.y > start.y: # direction: down |
|
|
|
else: # direction: right |
|
|
|
x_range = range(start.x, end.x - 1, -1) # reverse range |
|
|
|
if end.y > start.y: # direction: down |
|
|
|
y_range = range(start.y, end.y + 1) |
|
|
|
else: # direction: up |
|
|
|
y_range = range(start.y, end.y - 1, -1) # reverse range |
|
|
|
else: # direction: up |
|
|
|
y_range = range(start.y, end.y - 1, -1) # reverse range |
|
|
|
|
|
|
|
for x, y in zip(x_range, y_range): |
|
|
|
self.chart[x, y] += 1 |
|
|
|