Browse Source

Reworking for part 2

pull/5/head
Ryan Reed 3 years ago
parent
commit
909b3c63d0
2 changed files with 37 additions and 23 deletions
  1. +35
    -19
      puzzles/day05.py
  2. +2
    -4
      puzzles/test_day05.py

+ 35
- 19
puzzles/day05.py View File

@ -38,15 +38,15 @@ class VolcanicVent:
class Chart:
chart: Dict = None
vents: List = None
diagram: Dict = None
def __init__(self, vents: List[VolcanicVent]) -> None:
self.diagram = defaultdict(int)
def __init__(self, vents: List[VolcanicVent], diagnals: bool = True) -> None:
self.chart = defaultdict(int)
self.vents = vents
self._generate_diagram()
self._generate_chart(diagnals=diagnals)
def _generate_diagram(self) -> None:
def _generate_chart(self, diagnals: bool = True) -> None:
"""
.......1..
..1....1..
@ -59,32 +59,48 @@ class Chart:
..........
222111.... 0,9 -> 5,9 0,9 -> 2,9
"""
vents = self.vents.copy()
for vent in vents:
if vent.direction != "diagnal":
min_x = min(vent.start.x, vent.end.x)
max_x = max(vent.start.x, vent.end.x)
min_y = min(vent.start.y, vent.end.y)
max_y = max(vent.start.y, vent.end.y)
for x in range(min_x, max_x + 1):
for y in range(min_y, max_y + 1):
self.diagram[x, y] += 1
else:
pass
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
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
y_range = range(start.y, end.y + 1)
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
def _chart_line_horiz_vert(self, start: Location, end: Location) -> None:
min_x = min(start.x, end.x)
max_x = max(start.x, end.x)
min_y = min(start.y, end.y)
max_y = max(start.y, end.y)
for x in range(min_x, max_x + 1):
for y in range(min_y, max_y + 1):
self.chart[x, y] += 1
def calculate_overlaps(self, max_depth: int = 1) -> int:
return sum(depth_count > max_depth for depth_count in self.diagram.values())
return sum(depth_count > max_depth for depth_count in self.chart.values())
def part1(inputs: List[int]) -> int:
c = Chart(inputs)
c = Chart(inputs, diagnals=False)
return c.calculate_overlaps()
def part2(inputs: List[int]) -> int:
return False
c = Chart(inputs)
return c.calculate_overlaps()
def parse(inputs: str) -> List[int]:


+ 2
- 4
puzzles/test_day05.py View File

@ -20,15 +20,13 @@ def test_example1(example_data):
assert aoc.part1(example_data) == 5
@pytest.mark.skip(reason="Not implemented")
def test_example2(example_data):
assert aoc.part2(example_data) == ...
assert aoc.part2(example_data) == 12
def test_part1(day05_data):
assert aoc.part1(day05_data) == 6572
@pytest.mark.skip(reason="Not implemented")
def test_part2(day05_data):
assert aoc.part2(day05_data) == ...
assert aoc.part2(day05_data) == 21466

Loading…
Cancel
Save