diff options
| author | Louis Burda <quent.burda@gmail.com> | 2023-04-07 17:18:18 -0400 |
|---|---|---|
| committer | Louis Burda <quent.burda@gmail.com> | 2023-04-07 17:19:39 -0400 |
| commit | 87ab487d59fa85dbe2afa55cc841b02805ae42ca (patch) | |
| tree | cd90ab715e1b5b5803674045dbafd6d51d27ac90 /src/03/solve.py | |
| parent | 1bcc82c5bfbde87edd03c01ffdf9ee5934681592 (diff) | |
| download | aoc2018-python-87ab487d59fa85dbe2afa55cc841b02805ae42ca.tar.gz aoc2018-python-87ab487d59fa85dbe2afa55cc841b02805ae42ca.zip | |
Reorder days into src
Diffstat (limited to 'src/03/solve.py')
| -rw-r--r-- | src/03/solve.py | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/03/solve.py b/src/03/solve.py new file mode 100644 index 0000000..766b00e --- /dev/null +++ b/src/03/solve.py @@ -0,0 +1,65 @@ +import sys
+sys.path.append("../common")
+import aoc
+
+data = aoc.data.split("\n")
+
+#data = "#1 @ 1,3: 4x4","#2 @ 3,1: 4x4","#3 @ 5,5: 2x2"
+
+def parse_rect(l):
+ split = l.split("@")
+ id = int(split[0].replace("#",""))
+ split = split[1].split(":")
+ pos = [int(x) for x in split[0].split(",")]
+ size = [int(x) for x in split[1].split("x")]
+ return pos, size, id
+
+def create_map():
+ global rectdata
+ rectdata = [parse_rect(l) for l in data]
+ msize = list([0,0])
+ for i in range(len(rectdata)):
+ r = rectdata[i]
+ xm = r[0][0] + r[1][0]
+ ym = r[0][1] + r[1][1]
+ if i == 0 or xm > msize[0]:
+ msize[0] = xm
+ if i == 0 or ym > msize[1]:
+ msize[1] = ym
+
+ map = [[list() for y in range(msize[1])] for x in range(msize[0])]
+ for r in rectdata:
+ sx = r[0][0]
+ sy = r[0][1]
+ for x in range(sx, sx + r[1][0]):
+ for y in range(sy, sy + r[1][1]):
+ map[x][y].append(r[2])
+
+ return map
+
+def solve1(args):
+ map = create_map()
+
+ overlap = 0
+ for x in range(len(map)):
+ for y in range(len(map[0])):
+ if len(map[x][y]) > 1:
+ overlap += 1
+
+ return overlap
+
+def solve2(args):
+ map = create_map()
+
+ overlap = set()
+ for x in range(len(map)):
+ for y in range(len(map[0])):
+ if len(map[x][y]) > 1:
+ for id in map[x][y]:
+ overlap.add(id)
+
+ for i in range(1, len(rectdata)):
+ if i not in overlap:
+ return i
+
+aoc.run(solve1, solve2, sols=[114946, 877])
|
