Problem 11 of What is the greatest product of four adjacent numbers


In the 2020 grid below, four numbers along a diagonal line have been marked in red.
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48
The product of these numbers is 26  63  78  14 = 1788696.
What is the greatest product of four adjacent numbers in any direction (up, down, left, right, or diagonally) in the 2020 grid?
public class GridProduct {
	public static void main(String args[]){
		int [][] a={
				{8,02,22,97,38,15,00,40,00,75,04,05,07,78,52,12,50,77,91,8},
				{49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,04,56,62,00},
				{81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,03,49,13,36,65},
				{52,70,95,23,04,60,11,42,69,24,68,56,01,32,56,71,37,02,36,91},
				{22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80},
				{24,47,32,60,99,03,45,02,44,75,33,53,78,36,84,20,35,17,12,50},
				{32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70},
				{67,26,20,68,02,62,12,20,95,63,94,39,63,8,40,91,66,49,94,21},
				{24,55,58,05,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72},
				{21,36,23,9,75,00,76,44,20,45,35,14,00,61,33,97,34,31,33,95},
				{78,17,53,28,22,75,31,67,15,94,03,80,04,62,16,14,9,53,56,92},
				{16,39,05,42,96,35,31,47,55,58,88,24,00,17,54,24,36,29,85,57},
				{86,56,00,48,35,71,89,07,05,44,44,37,44,60,21,58,51,54,17,58},
				{19,80,81,68,05,94,47,69,28,73,92,13,86,52,17,77,04,89,55,40},
				{04,52,8,83,97,35,99,16,07,97,57,32,16,26,26,79,33,27,98,66},
				{88,36,68,87,57,62,20,72,03,46,33,67,46,55,12,32,63,93,53,69},
				{04,42,16,73,38,25,39,11,24,94,72,18,8,46,29,32,40,62,76,36},
				{20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74,04,36,16},
				{20,73,35,29,78,31,90,01,74,31,49,71,48,86,81,16,23,57,05,54},
				{01,70,54,71,83,51,54,69,16,92,33,48,61,43,52,01,89,19,67,48},
		};
		int mul1=1,mul2=1,mul3=1,mul4=1;
		//down
		for(int i=0;i<20;i++){
			for(int j=0;j<17;j++){
				int pro1=a[i][j]*a[i][j+1]*a[i][j+2]*a[i][j+3];
				if(mul1<pro1){
					mul1=pro1;
				}
			}
		}
		//left
		for(int i=0;i<17;i++){
			for(int j=0;j<20;j++){
				int pro2=a[i][j]*a[i+1][j]*a[i+2][j]*a[i+3][j];
				if(mul2<pro2){
					mul2=pro2;
				}
			}
		}
		//diagonally right
		for(int i=0;i<17;i++){
			for(int j=0;j<17;j++){
				int pro3=a[i][j]*a[i+1][j+1]*a[i+2][j+2]*a[i+3][j+3];
				if(mul3<pro3){
					mul3=pro3;
				}
			}
		}
		//diagonally left
		for(int i=19;i>=3;i--){
			for(int j=0;j<17;j++){
				int pro4=a[i][j]*a[i-1][j+1]*a[i-2][j+2]*a[i-3][j+3];
				if(mul4<pro4){
					mul4=pro4;
				}
			}
		}
		
		System.out.println("mul1="+mul1+",mul2="+mul2+",mul3="+mul3+",mul4="+mul4);
	}
}

Answer:
70600674
import java.util.HashMap;

public class Recss {

	static HashMap<Integer, String> horHashmap=new HashMap<Integer, String>();
	public static int horizental(int [][] array){
		int result=0;
		for(int m=0;m<20;m++){
			for(int n=0;n<17;n++){
				
					int temp=array[m][n]*array[m][n+1]*array[m][n+2]*array[m][n+3];
					if(temp>result){
						horHashmap.put(temp,String.valueOf(array[m][n])+","+String.valueOf(array[m][n+1])+","+String.valueOf(array[m][n+2])+","+String.valueOf(array[m][n+3]));
						result=temp;
					
				}
			}
		}
		return result;
	}
	
	static HashMap<Integer, String> verHashmap=new HashMap<Integer, String>();
	public static int vertal(int [][] array){
		int result=0;
		for(int m=0;m<17;m++){
			for(int n=0;n<20;n++){
					int temp=array[m][n]*array[m+1][n]*array[m+2][n]*array[m+3][n];
					if(temp>result){
						verHashmap.put(temp,String.valueOf(array[m][n])+","+String.valueOf(array[m+1][n])+","+String.valueOf(array[m+2][n])+","+String.valueOf(array[m+3][n]));
						result=temp;
					
				}
			}
		}
		return result;
	}
	static HashMap<Integer, String> xieHashmap=new HashMap<Integer, String>();
	public static int xie(int [][] array){
		int result=0;
		for(int m=0;m<17;m++){
			for(int n=0;n<17;n++){
					int temp=array[m][n]*array[m+1][n+1]*array[m+2][n+2]*array[m+3][n+3];
					if(temp>result){
						xieHashmap.put(temp,String.valueOf(array[m][n])+","+String.valueOf(array[m+1][n+2])+","+String.valueOf(array[m+2][n+3])+","+String.valueOf(array[m+3][n+4]));
						result=temp;
					
				}
			}
		}
		return result;
	}
	static HashMap<Integer, String> fanxiangHashmap=new HashMap<Integer, String>();
	public static int fanxiang(int [][] array){
		int result=0;
		for(int m=19;m>2;m--){
			for(int n=0;n<17;n++){
					int temp=array[m][n]*array[m-1][n+1]*array[m-2][n+2]*array[m-3][n+3];
					if(temp>result){
						fanxiangHashmap.put(temp,String.valueOf(array[m][n])+","+String.valueOf(array[m-1][n+1])+","+String.valueOf(array[m-2][n+2])+","+String.valueOf(array[m-3][n+3]));
						result=temp;
					
				}
			}
		}
		return result;
	}
	public static void main(String[] args) {
		int [][] array={{8,02,22,97,38,15,00,40,00,75,04,05,07,78,52,12,50,77,91,8},
						{49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,04,56,62,00},
						{81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,03,49,13,36,65},
						{52,70,95,23,04,60,11,42,69,24,68,56,01,32,56,71,37,02,36,91},
						{22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80},
						{24,47,32,60,99,03,45,02,44,75,33,53,78,36,84,20,35,17,12,50},
						{32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70},
						{67,26,20,68,02,62,12,20,95,63,94,39,63,8,40,91,66,49,94,21},
						{24,55,58,05,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72},
						{21,36,23,9,75,00,76,44,20,45,35,14,00,61,33,97,34,31,33,95},
						{78,17,53,28,22,75,31,67,15,94,03,80,04,62,16,14,9,53,56,92},
						{16,39,05,42,96,35,31,47,55,58,88,24,00,17,54,24,36,29,85,57},
						{86,56,00,48,35,71,89,07,05,44,44,37,44,60,21,58,51,54,17,58},
						{19,80,81,68,05,94,47,69,28,73,92,13,86,52,17,77,04,89,55,40},
						{04,52,8,83,97,35,99,16,07,97,57,32,16,26,26,79,33,27,98,66},
						{88,36,68,87,57,62,20,72,03,46,33,67,46,55,12,32,63,93,53,69},
						{04,42,16,73,38,25,39,11,24,94,72,18,8,46,29,32,40,62,76,36},
						{20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74,04,36,16},
						{20,73,35,29,78,31,90,01,74,31,49,71,48,86,81,16,23,57,05,54},
						{01,70,54,71,83,51,54,69,16,92,33,48,61,43,52,01,89,19,67,48}};
		Recss rec=new Recss();
		System.out.println(horizental(array));
		System.out.println(horHashmap.get(horizental(array)));
		System.out.println(vertal(array));
		System.out.println(verHashmap.get(vertal(array)));
		System.out.println(xie(array));
		System.out.println(xieHashmap.get(xie(array)));
		System.out.println(fanxiang(array));
		System.out.println(fanxiangHashmap.get(fanxiang(array)));
	}
	
}