Added 2018 day 6 part 1

This commit is contained in:
Akumatic 2019-11-18 02:56:16 +01:00
parent 86c3212b4b
commit ca241487aa
2 changed files with 135 additions and 0 deletions

85
2018/day06.py Normal file
View File

@ -0,0 +1,85 @@
""" https://adventofcode.com/2018/day/6 """
def readFile():
import os.path as p
dName = p.dirname(__file__)
fName = p.basename(__file__).split(".")[0]
with open(p.join(dName, "input", f"{fName}.txt"), "r") as f:
lines = [line[:-1].split(", ") for line in f.readlines()]
return [Point(int(line[0]), int(line[1])) for line in lines]
class Point:
n = 0
def __init__(self, x, y):
self.x = x
self.y = y
self.name = str(Point.n).zfill(3)
Point.n += 1
self.coords = (x, y)
self.isInfinite = False
def getDistance(self, x, y):
return abs(self.x - x) + abs(self.y - y)
def getMinimumOfDict(data : dict):
minVal = None
minID = None
for d in data:
if minVal is None or data[d] < minVal:
minVal = data[d]
minID = d
return minVal, minID
def part1(vals):
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)
field = []
for y in range(miny, maxy + 1):
field.append([-1 for x in range(minx, maxx + 1)])
for y in range(miny, maxy + 1):
for x in range(minx, maxx + 1):
dist = {}
for val in vals:
dist[val.name] = val.getDistance(x, y)
minDist, point = getMinimumOfDict(dist)
if sum(value == minDist for value in dist.values()) == 1:
field[y-miny][x-minx] = point
points = {}
for y in range(miny, maxy + 1):
for x in range(minx, maxx + 1):
id = field[y-miny][x-minx]
if id == -1:
continue
if id in points:
points[id]["value"] += 1
if not points[id]["border"]:
points[id]["border"] = x == minx or x == maxx or y == miny or y == maxy
else:
points[id] = {
"value": 1,
"border": x == minx or x == maxx or y == miny or y == maxy
}
result = -1
for point in points:
if points[point]["border"]:
continue
if points[point]["value"] > result:
result = points[point]["value"]
return result
def part2(vals):
pass
if __name__ == "__main__":
vals = readFile()
#vals = [Point(1, 1), Point(1, 6), Point(8, 3), Point(3, 4), Point(5, 5), Point(8, 9)]
print(f"Part 1: {part1(vals)}")
print(f"Part 2: {part2(vals)}")

50
2018/input/day06.txt Normal file
View File

@ -0,0 +1,50 @@
118, 274
102, 101
216, 203
208, 251
309, 68
330, 93
91, 179
298, 278
201, 99
280, 272
141, 312
324, 290
41, 65
305, 311
198, 68
231, 237
164, 224
103, 189
216, 207
164, 290
151, 91
166, 250
129, 149
47, 231
249, 100
262, 175
299, 237
62, 288
228, 219
224, 76
310, 173
80, 46
312, 65
183, 158
272, 249
57, 141
331, 191
163, 359
271, 210
142, 137
349, 123
55, 268
160, 82
180, 70
231, 243
133, 353
246, 315
164, 206
229, 97
268, 94