Added 2018 day 6 part 2
This commit is contained in:
@ -19,7 +19,6 @@ class Point:
|
|||||||
self.coords = (x, y)
|
self.coords = (x, y)
|
||||||
self.isInfinite = False
|
self.isInfinite = False
|
||||||
|
|
||||||
|
|
||||||
def getDistance(self, x, y):
|
def getDistance(self, x, y):
|
||||||
return abs(self.x - x) + abs(self.y - y)
|
return abs(self.x - x) + abs(self.y - y)
|
||||||
|
|
||||||
@ -75,11 +74,41 @@ def part1(vals):
|
|||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def part2(vals):
|
class Location:
|
||||||
pass
|
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__":
|
if __name__ == "__main__":
|
||||||
vals = readFile()
|
vals, maxDist = readFile(), 10000
|
||||||
#vals = [Point(1, 1), Point(1, 6), Point(8, 3), Point(3, 4), Point(5, 5), Point(8, 9)]
|
#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 1: {part1(vals)}")
|
||||||
print(f"Part 2: {part2(vals)}")
|
print(f"Part 2: {part2(vals, maxDist)}")
|
Reference in New Issue
Block a user