Wednesday, 29 March 2017

Hacker Rank HourGlassMaxValue Solutions

Context
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.
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;
 }
}