diff --git a/2018/day06.py b/2018/day06.py new file mode 100644 index 0000000..48b07ab --- /dev/null +++ b/2018/day06.py @@ -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)}") \ No newline at end of file diff --git a/2018/input/day06.txt b/2018/input/day06.txt new file mode 100644 index 0000000..c467433 --- /dev/null +++ b/2018/input/day06.txt @@ -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