Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static void main(String[] args) {
- long start = System.currentTimeMillis();
- // Define the serial number of the grid.
- int serialNumber = 4455;
- // Create a 2D array that will contain the power levels of each cell.
- int[][] powerLevels = new int[300][300];
- // Initialize the grid with their default coordinate values for each cell.
- for (int y = 1; y <= powerLevels.length; y++) {
- for (int x = 1; x <= powerLevels[0].length; x++) {
- int rackId = x + 10;
- int powerLevel = (rackId * y + serialNumber) * rackId;
- powerLevels[y - 1][x - 1] = ((powerLevel / 100) % 10) - 5;
- }
- }
- AtomicInteger maxX = new AtomicInteger(), maxY = new AtomicInteger(), maxGrid = new AtomicInteger(1),
- maxSum = new AtomicInteger(Integer.MIN_VALUE);
- IntStream.range(0, powerLevels.length).parallel().forEach(y -> {
- for (int x = 0; x < powerLevels[0].length; x++) {
- int prevSum = 0;
- for (int gridSize = 1; gridSize < Integer.min(powerLevels.length - y, powerLevels[0].length - x); gridSize++) {
- int sum = prevSum;
- int lineY = y + gridSize - 1;
- int lineX = x + gridSize - 1;
- for (int outerY = y; outerY <= lineY; outerY++) {
- sum += powerLevels[outerY][lineX];
- }
- for (int outerX = x; outerX < lineX; outerX++) {
- sum += powerLevels[lineY][outerX];
- }
- prevSum = sum;
- int finalSum = sum;
- int finalGridSize = gridSize;
- int finalX = x;
- maxSum.updateAndGet(value -> {
- if (value >= finalSum) {
- return value;
- }
- maxGrid.set(finalGridSize);
- maxX.set(finalX + 1);
- maxY.set(y + 1);
- return finalSum;
- });
- }
- }
- });
- System.out.println(maxX + "," + maxY + "," + maxGrid + " " + (System.currentTimeMillis() - start) + "ms");
- }
Add Comment
Please, Sign In to add comment