Guest User

Untitled

a guest
Dec 11th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. public static void main(String[] args) {
  2. long start = System.currentTimeMillis();
  3.  
  4. // Define the serial number of the grid.
  5. int serialNumber = 4455;
  6.  
  7. // Create a 2D array that will contain the power levels of each cell.
  8. int[][] powerLevels = new int[300][300];
  9.  
  10. // Initialize the grid with their default coordinate values for each cell.
  11. for (int y = 1; y <= powerLevels.length; y++) {
  12. for (int x = 1; x <= powerLevels[0].length; x++) {
  13. int rackId = x + 10;
  14. int powerLevel = (rackId * y + serialNumber) * rackId;
  15. powerLevels[y - 1][x - 1] = ((powerLevel / 100) % 10) - 5;
  16. }
  17. }
  18.  
  19. AtomicInteger maxX = new AtomicInteger(), maxY = new AtomicInteger(), maxGrid = new AtomicInteger(1),
  20. maxSum = new AtomicInteger(Integer.MIN_VALUE);
  21.  
  22. IntStream.range(0, powerLevels.length).parallel().forEach(y -> {
  23. for (int x = 0; x < powerLevels[0].length; x++) {
  24. int prevSum = 0;
  25.  
  26. for (int gridSize = 1; gridSize < Integer.min(powerLevels.length - y, powerLevels[0].length - x); gridSize++) {
  27. int sum = prevSum;
  28. int lineY = y + gridSize - 1;
  29. int lineX = x + gridSize - 1;
  30.  
  31. for (int outerY = y; outerY <= lineY; outerY++) {
  32. sum += powerLevels[outerY][lineX];
  33. }
  34.  
  35. for (int outerX = x; outerX < lineX; outerX++) {
  36. sum += powerLevels[lineY][outerX];
  37. }
  38.  
  39. prevSum = sum;
  40.  
  41. int finalSum = sum;
  42. int finalGridSize = gridSize;
  43. int finalX = x;
  44.  
  45. maxSum.updateAndGet(value -> {
  46. if (value >= finalSum) {
  47. return value;
  48. }
  49.  
  50. maxGrid.set(finalGridSize);
  51. maxX.set(finalX + 1);
  52. maxY.set(y + 1);
  53.  
  54. return finalSum;
  55. });
  56. }
  57. }
  58. });
  59.  
  60. System.out.println(maxX + "," + maxY + "," + maxGrid + " " + (System.currentTimeMillis() - start) + "ms");
  61. }
Add Comment
Please, Sign In to add comment