Context
Given a 2D Array, :
Given a 2D Array, :
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
We define an hourglass in to be a subset of values with indices falling in this pattern in 's graphical representation:
a b c
d
e f g
There are hourglasses in , and an hourglass sum is the sum of an hourglass' values.
Task
Calculate the hourglass sum for every hourglass in , then print the maximum hourglass sum.
Calculate the hourglass sum for every hourglass in , then print the maximum hourglass sum.
Note: If you have already solved the Java domain's Java 2D Array challenge, you may wish to skip this challenge.
Input Format
There are lines of input, where each line contains space-separated integers describing 2D Array ; every value in will be in the inclusive range of to .
Constraints
Output Format
Print the largest (maximum) hourglass sum found in .
Sample Input
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 2 4 4 0
0 0 0 2 0 0
0 0 1 2 4 0
Sample Output
19
Explanation
contains the following hourglasses:
1 1 1 1 1 0 1 0 0 0 0 0
1 0 0 0
1 1 1 1 1 0 1 0 0 0 0 0
0 1 0 1 0 0 0 0 0 0 0 0
1 1 0 0
0 0 2 0 2 4 2 4 4 4 4 0
1 1 1 1 1 0 1 0 0 0 0 0
0 2 4 4
0 0 0 0 0 2 0 2 0 2 0 0
0 0 2 0 2 4 2 4 4 4 4 0
0 0 2 0
0 0 1 0 1 2 1 2 4 2 4 0
The hourglass with the maximum sum () is:
2 4 4
2
1 2 4
Solutions :
import java.util.Scanner;
public class HourGlassMaxValue{
public static void main(String arr[]){
try{
Scanner in=new Scanner(System.in);
System.out.println(" Please enter the value : ");
int arrayI[][]=new int[6][6];
int k=36;
for(int i=0;i<arrayI.length;i++){
for(int j=0;j<arrayI.length;j++){
arrayI[i][j]=in.nextInt();
k--;
System.out.println(" Remaining "+k);
}
}
System.out.println(" Number Input completed.");
int maxInputValue=0;
for(int i=0;i<arrayI.length;i++){
for(int j=0;j<arrayI.length;j++){
int sum=getMaxValue(arrayI,i,j);
if(sum!=-1){
if(sum>maxInputValue){
System.out.println(" Max value : "+sum);
maxInputValue=sum;
}
}
}
}
System.out.println(" Max value is : "+maxInputValue);
}catch(Exception e){
e.printStackTrace();
}
}
private static int getMaxValue(int array[][],int x,int y){
if(x==0|| y==0||x==array.length-1||y==array.length-1){
System.out.println(" X or Y "+x+" "+y);
return -1;
}
int sum=array[y+1][x-1]+array[y+1][x]+array[y+1][x+1]+array[y][x]+array[y-1][x-1]+array[y-1][x]+array[y-1][x+1];
System.out.println(" The sum : "+x+" "+y+" are : "+sum);
return sum;
}
}