import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class HackerRankHourglass {

    public static void methodToImplement(int[][] arr) {
        System.out.println("2D array: ");
        for (int i=0; i<arr.length;i++) {
            for(int j=0;j<arr[i].length;j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println(" ");
        }

        int[][] hourGlassValues = new int[arr.length-2][arr.length-2];

        for(int i=0;i<arr.length-2;i++) {
            for(int j=0;j<arr.length-2; j++) {
                int r1Sum = arr[i][j] + arr[i][j+1]+ arr[i][j+2];
                int r2Sum = arr[i+1][j+1];
                int r3Sum = arr[i+2][j] + arr[i+2][j+1]+ arr[i+2][j+2];
                hourGlassValues[i][j] = r1Sum+r2Sum+r3Sum;
            }
        }

        System.out.println("Hourglass matrix: ");
        for(int i=0;i<hourGlassValues.length;i++) {
            for(int j=0;j<hourGlassValues.length;j++) {
                System.out.print(hourGlassValues[i][j] + " ");
            }
            System.out.println(" ");
        }

        List<Integer> sums = new ArrayList<>();
        for(int[] each_i: hourGlassValues) {
            for(int each_ij: each_i) {
                sums.add(each_ij);
            }
        }
        System.out.println("No of sums " + sums.size());
        Collections.sort(sums, Integer::compareTo);
        Collections.reverse(sums);
        System.out.println("Sorted sum " + sums);

        System.out.println("Max value is " + sums.get(0));
    }

    public static void main (String[] args) {
        int[][] arr1 = {
                {1,1,1,0,0,0},
                {0,1,0,0,0,0},
                {1,1,1,0,0,0},
                {0,0,0,0,0,0},
                {0,0,0,0,0,0},
                {0,0,0,0,0,0}
        };

        int[][] arr2 = {
                {-9,-9,-9,1,1,1},
                {0,-9,0,4,3,2},
                {-9,-9,-9,1,2,3},
                {0,0,8,6,6,0},
                {0,0,0,-2,0,0},
                {0,0,1,2,4,0}
        };
        methodToImplement(arr1);
    }

}
