aboutsummaryrefslogtreecommitdiffstats
path: root/src/11/solve.py
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2023-04-07 17:18:18 -0400
committerLouis Burda <quent.burda@gmail.com>2023-04-07 17:19:39 -0400
commit87ab487d59fa85dbe2afa55cc841b02805ae42ca (patch)
treecd90ab715e1b5b5803674045dbafd6d51d27ac90 /src/11/solve.py
parent1bcc82c5bfbde87edd03c01ffdf9ee5934681592 (diff)
downloadaoc2018-python-87ab487d59fa85dbe2afa55cc841b02805ae42ca.tar.gz
aoc2018-python-87ab487d59fa85dbe2afa55cc841b02805ae42ca.zip
Reorder days into src
Diffstat (limited to 'src/11/solve.py')
-rw-r--r--src/11/solve.py76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/11/solve.py b/src/11/solve.py
new file mode 100644
index 0000000..66fc956
--- /dev/null
+++ b/src/11/solve.py
@@ -0,0 +1,76 @@
+import sys
+sys.path.append("../common")
+import aoc
+
+gridserial = int(aoc.data)
+
+# rack ID = x + 10
+# intial power = rackID * y
+# power += gridserial
+# power *= rackID
+# power = str(power)[2]
+# power -= 5
+
+def get_power(x,y):
+ id = x + 10
+ power = id * y
+ power += gridserial
+ power *= id
+ spower = str(power)
+ if len(spower) > 2:
+ power = int(spower[-3])
+ else:
+ power = 0
+ power -= 5
+ return power
+
+def solve1(args):
+ maxpower = None
+ coords = None
+ for x in range(300-2):
+ for y in range(300-2):
+ power = 0;
+ for i in range(3):
+ for j in range(3):
+ power += get_power(x+i,y+j)
+ if maxpower == None or power > maxpower:
+ maxpower = power
+ coords = (x, y)
+
+ return f"{coords[0]},{coords[1]}"
+
+def gen_map():
+ vmap = [[0 for y in range(300)] for x in range(300)]
+ for x in range(300):
+ for y in range(300):
+ vmap[x][y] = get_power(x,y)
+ return vmap
+
+def solve2(args):
+ maxpower = None
+ res = None
+ pmap = gen_map()
+ vmap = [[list() for y in range(300)] for x in range(300)]
+ for s in range(1, 301):
+ aoc.debug(f"\rTrying: {s}", end="")
+ cmaxpower = None
+ cres = None
+ for x in range(300-(s-1)):
+ for y in range(300-(s-1)):
+ vmap[x][y] += [pmap[x+(s-1)][y+i] for i in range(s)]
+ vmap[x][y] += [pmap[x+i][y+(s-1)] for i in range(s-1)]
+ power = sum(vmap[x][y]);
+ if cmaxpower == None or power > cmaxpower:
+ cmaxpower = power
+ cres = (x, y, s)
+ if maxpower == None or cmaxpower > maxpower:
+ maxpower = cmaxpower
+ res = cres
+ elif cmaxpower < maxpower:
+ break
+
+ aoc.debug("\r" + " " * 50 + "\r", end="")
+
+ return f"{res[0]},{res[1]},{res[2]}"
+
+aoc.run(solve1, solve2, sols=["21,93", "231,108,14"])