summaryrefslogtreecommitdiff
path: root/2018/aoc2018-d11.py
diff options
context:
space:
mode:
authorblenovo <bk@gmail.com>2025-08-16 00:38:26 +0200
committerblenovo <bk@gmail.com>2025-08-16 00:38:26 +0200
commitf6ff66ea2da1f30303f17a2dac341411fb325881 (patch)
tree934b79fc762547e474a5277723c0c5087b56698f /2018/aoc2018-d11.py
parentedf82358166db84f74419f9a83d328390cc6b356 (diff)
final puzzle and little cleanup for 2018blen
Diffstat (limited to '2018/aoc2018-d11.py')
-rw-r--r--2018/aoc2018-d11.py110
1 files changed, 110 insertions, 0 deletions
diff --git a/2018/aoc2018-d11.py b/2018/aoc2018-d11.py
new file mode 100644
index 0000000..442f373
--- /dev/null
+++ b/2018/aoc2018-d11.py
@@ -0,0 +1,110 @@
+#advent of code 2018
+#day 11
+#part 1 and 2
+#at this point it would probably be faster to rewrite the solution
+#instead of trying to merge both parts bc i have no clue whats going on
+#maybe someday
+
+#setup
+GridSize = 300;
+SquareSize = 3;
+fcserialnumber = int(open("11.in",'r').readline());
+
+
+class fuelcell:
+ def __init__(self, x, y, serialnumber):
+ self.positionX = x;
+ self.positionY = y;
+ self.rackID = self.positionX + 10;
+ self.powerlevel = self.rackID * self.positionY;
+ self.powerlevel += serialnumber;
+ self.powerlevel *= self.rackID;
+ self.powerlevel = self.powerlevel//100;
+ self.powerlevel = self.powerlevel%10;
+ self.powerlevel -= 5;
+ def coords(self):
+ #print(f'Fuel Cell coordinates (x,y): {self.positionX},{self.positionY} ');
+ return f'{self.positionX},{self.positionY}';
+ def __str__(self):
+ return f'{self.powerlevel}';
+
+fcgrid = [];
+gridline = [];
+
+for Y in range(GridSize):
+ gridline.clear();
+ for X in range(GridSize):
+ gridline.append(fuelcell(X+1,Y+1,fcserialnumber));
+ fcgrid.append(gridline.copy());
+
+maxpower = -999; #negative power just to start the algorythm
+maxX = 0;
+maxY = 0;
+powernow = 0;
+
+for Y in range(GridSize-SquareSize+1):
+ for X in range(GridSize-SquareSize+1):
+ powernow = 0;
+ for sy in range(SquareSize):
+ for sx in range(SquareSize):
+ powernow += fcgrid[Y+sy][X+sx].powerlevel;
+ if (powernow > maxpower):
+ maxpower = powernow;
+ maxX = X;
+ maxY = Y;
+
+print("part 1 =",fcgrid[maxY][maxX].coords());
+
+fcgrid = [];
+gridline = [];
+
+for Y in range(GridSize):
+ gridline.clear();
+ for X in range(GridSize):
+ gridline.append(fuelcell(X+1,Y+1,fcserialnumber));
+ fcgrid.append(gridline.copy());
+
+sumtable = [];
+
+gridline.clear();
+gridline.append(fcgrid[0][0].powerlevel);
+
+for X in range(1,GridSize):
+ SubSumFc = fcgrid[0][X].powerlevel + gridline[X-1];
+ gridline.append(SubSumFc);
+sumtable.append(gridline.copy());
+
+currentsubsum = 0;
+
+for Y in range(1,GridSize):
+ gridline.clear();
+ SubSumFc = sumtable[Y-1][0] + fcgrid[Y][0].powerlevel;
+ gridline.append(SubSumFc);
+ currentsubsum = fcgrid[Y][0].powerlevel;
+ for X in range(1,GridSize):
+ currentsubsum += fcgrid[Y][X].powerlevel;
+ gridline.append(sumtable[Y-1][X] + currentsubsum);
+ sumtable.append(gridline.copy());
+
+maxpower = -999;
+maxX = 0;
+maxY = 0;
+powernow = 0;
+maxsquare = 0;
+
+for Y in range(1,GridSize-3):
+ ssy = GridSize - Y;
+ for X in range(1,GridSize-3):
+ ssx = GridSize - X;
+ SquareSize = (ssx>=ssy)*ssy + ssx*(ssx<ssy);
+ for s in range(SquareSize):
+ powernow = 0;
+ powernow = sumtable[Y+s][X+s] - sumtable[Y-1][X+s] - sumtable[Y+s][X-1] + sumtable[Y-1][X-1];
+ if (powernow > maxpower):
+ maxX = X;
+ maxY = Y;
+ maxpower = powernow;
+ maxsquare = s;
+
+print("part 2 =", f'{fcgrid[maxY][maxX].positionX},{fcgrid[maxY][maxX].positionY},{maxsquare+1}')#,end="");
+