Advertisement
Guest User

Untitled

a guest
Dec 11th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.58 KB | None | 0 0
  1. package Advent2018;
  2.  
  3. import util.AdventOfCode;
  4.  
  5. import java.util.List;
  6.  
  7. public class Day11 extends AdventOfCode {
  8.  
  9.     final int SERIAL = 1718;
  10.     final int GRID_SIZE = 300;
  11.     int[][] grid = new int[GRID_SIZE][GRID_SIZE];
  12.     int xMax;
  13.     int yMax;
  14.  
  15.     int maxSubMatrix(int array[][], int k) {
  16.     int tmp[][] = new int[GRID_SIZE - k + 1][GRID_SIZE];
  17.  
  18.         int sum;
  19.         int maxSum = Integer.MIN_VALUE;
  20.         for (int j = 0; j < GRID_SIZE; j++) {
  21.             sum = 0;
  22.             for (int i = 0; i < k; i++) {
  23.                 sum += array[i][j];
  24.             }
  25.             tmp[0][j] = sum;
  26.             for (int i = 1; i < GRID_SIZE - k + 1; i++) {
  27.                 sum = sum - array[i - 1][j] + array[i + k - 1][j];
  28.                 tmp[i][j] = sum;
  29.             }
  30.         }
  31.         int tSum = 0;
  32.         int iIndex = -1;
  33.         int jIndex = -1;
  34.         for (int i = 0; i < tmp.length; i++) {
  35.             tSum = 0;
  36.             int j;
  37.             for (j = 0; j < k; j++) {
  38.                 tSum += tmp[i][j];
  39.             }
  40.             if (tSum > maxSum) {
  41.                 maxSum = tSum;
  42.                 iIndex = i;
  43.                 jIndex = j;
  44.             }
  45.  
  46.             sum = tSum;
  47.             for (j = 1; j < GRID_SIZE - k + 1; j++) {
  48.                 sum = sum - tmp[i][j - 1] + tmp[i][j + k - 1];
  49.                 if (sum > maxSum) {
  50.                     maxSum = sum;
  51.                     iIndex = i;
  52.                     jIndex = j;
  53.                 }
  54.             }
  55.         }
  56.         xMax = jIndex + 1;
  57.         yMax = iIndex + 1;
  58.  
  59.         return maxSum;
  60.     }
  61.  
  62.     int power(int x, int y) {
  63.         return ((((((x + 10) * y) + SERIAL) * (x + 10)) / 100) % 10 ) - 5;
  64.     }
  65.  
  66.     public Day11(List<String> input) {
  67.         super(input);
  68.     }
  69.  
  70.     @Override
  71.     public Object part1() {
  72.         for (int i = 1; i <= GRID_SIZE; i++) {
  73.             for (int j = 1; j < GRID_SIZE; j++) {
  74.                 grid[j - 1][i - 1] = power(i, j);
  75.             }
  76.         }
  77.         maxSubMatrix(grid, 3);
  78.         return xMax + "," + yMax;
  79.     }
  80.  
  81.     @Override
  82.     public Object part2() {
  83.         int max = Integer.MIN_VALUE;
  84.         int maxIndex = 0;
  85.         int maxX = 0;
  86.         int maxY = 0;
  87.         for (int i = 1; i <= GRID_SIZE; i++) {
  88.             int p = maxSubMatrix(grid, i);
  89.             if (p > max) {
  90.                 max = p;
  91.                 maxIndex = i;
  92.                 maxX = xMax;
  93.                 maxY = yMax;
  94.             }
  95.         }
  96.         return maxX + "," + maxY +"," + maxIndex;
  97.     }
  98.  
  99.     @Override
  100.     public void parse() {
  101.  
  102.     }
  103.  
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement