#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="");