From f6ff66ea2da1f30303f17a2dac341411fb325881 Mon Sep 17 00:00:00 2001 From: blenovo Date: Sat, 16 Aug 2025 00:38:26 +0200 Subject: final puzzle and little cleanup for 2018 --- 2018/aoc2018-d11.py | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 2018/aoc2018-d11.py (limited to '2018/aoc2018-d11.py') 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 maxpower): + maxX = X; + maxY = Y; + maxpower = powernow; + maxsquare = s; + +print("part 2 =", f'{fcgrid[maxY][maxX].positionX},{fcgrid[maxY][maxX].positionY},{maxsquare+1}')#,end=""); + -- cgit v1.2.3