From ac7e2b27b5d8625164a2e858a6a2ff51fc6a1450 Mon Sep 17 00:00:00 2001 From: Akumatic Date: Mon, 18 Nov 2019 23:27:59 +0100 Subject: [PATCH] Added 2018 day 6 part 2 --- 2018/day06.py | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/2018/day06.py b/2018/day06.py index 48b07ab..3449aaa 100644 --- a/2018/day06.py +++ b/2018/day06.py @@ -19,7 +19,6 @@ class Point: self.coords = (x, y) self.isInfinite = False - def getDistance(self, x, y): return abs(self.x - x) + abs(self.y - y) @@ -75,11 +74,41 @@ def part1(vals): return result -def part2(vals): - pass +class Location: + maxDist = 0 + def __init__(self, x, y): + self.distance = 0 + self.x = x + self.y = y + self.inRegion = True + + def addDistance(self, point): + self.distance += point.getDistance(self.x, self.y) + if self.distance >= Location.maxDist: + self.inRegion = False + +def part2(vals, maxDist): + x, y = [val.x for val in vals], [val.y for val in vals] + minx, maxx, miny, maxy = min(x), max(x), min(y), max(y) + Location.maxDist = maxDist + + locations = [] + for j in range(miny, maxy + 1): + for i in range(minx, maxx + 1): + loc = Location(i, j) + for point in vals: + loc.addDistance(point) + locations.append(loc) + + count = 0 + for loc in locations: + if loc.inRegion: + count += 1 + return count if __name__ == "__main__": - vals = readFile() - #vals = [Point(1, 1), Point(1, 6), Point(8, 3), Point(3, 4), Point(5, 5), Point(8, 9)] + vals, maxDist = readFile(), 10000 + #vals, maxDist = [Point(1, 1), Point(1, 6), Point(8, 3), Point(3, 4), + # Point(5, 5), Point(8, 9)], 32 print(f"Part 1: {part1(vals)}") - print(f"Part 2: {part2(vals)}") \ No newline at end of file + print(f"Part 2: {part2(vals, maxDist)}") \ No newline at end of file