diff options
| author | Louis Burda <quent.burda@gmail.com> | 2020-12-08 21:53:34 +0100 |
|---|---|---|
| committer | Louis Burda <quent.burda@gmail.com> | 2020-12-08 21:53:34 +0100 |
| commit | 61c19fd58a9c32919b9b06d38dd9ba202cf43bfb (patch) | |
| tree | 716d58ee8979d3df123acfedcd5cb8472722d422 /src/11 | |
| download | aoc2018-python-61c19fd58a9c32919b9b06d38dd9ba202cf43bfb.tar.gz aoc2018-python-61c19fd58a9c32919b9b06d38dd9ba202cf43bfb.zip | |
Solve 25 days
Diffstat (limited to 'src/11')
| -rw-r--r-- | src/11/input.txt | 1 | ||||
| -rw-r--r-- | src/11/solve.py | 80 |
2 files changed, 81 insertions, 0 deletions
diff --git a/src/11/input.txt b/src/11/input.txt new file mode 100644 index 0000000..141d29f --- /dev/null +++ b/src/11/input.txt @@ -0,0 +1 @@ +1955 diff --git a/src/11/solve.py b/src/11/solve.py new file mode 100644 index 0000000..c2f20a8 --- /dev/null +++ b/src/11/solve.py @@ -0,0 +1,80 @@ +import sys
+args = sys.argv
+
+gridserial = int(open("input.txt").read())
+
+# rack ID = x + 10
+# intial power = rackID * y
+# power += gridserial
+# power *= rackID
+# power = str(power)[2]
+# power -= 5
+
+def getPower(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():
+ 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 += getPower(x+i,y+j)
+ if maxpower == None or power > maxpower:
+ maxpower = power
+ coords = (x, y)
+ print(f"{coords[0]},{coords[1]}")
+
+def genMap():
+ 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] = getPower(x,y)
+ return vmap
+
+def solve2():
+ maxpower = None
+ res = None
+ pmap = genMap()
+ vmap = [[list() for y in range(300)] for x in range(300)]
+ for s in range(1, 301):
+ print(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
+
+ print("\r" + " " * 50 + "\r", end="")
+ print(f"{res[0]},{res[1]},{res[2]}")
+
+def main():
+ if len(args) > 1:
+ if args[1] == "1":
+ solve1()
+ elif args[1] == "2":
+ solve2()
+
+main()
|
