Added 2018 day 6 part 1
This commit is contained in:
parent
86c3212b4b
commit
ca241487aa
85
2018/day06.py
Normal file
85
2018/day06.py
Normal 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
50
2018/input/day06.txt
Normal 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
|
Loading…
x
Reference in New Issue
Block a user