This is the 11th problem from Project Euler and I have used brute force to solve it.
Brute force:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Problem_11 {
private static int s_gridSize = 20;
public int getMaxProduct(int[][] numberGrid) {
int maxProduct = 0;
for (int i = 0; i < Problem_11.s_gridSize; i++)
for (int j = 0; j < Problem_11.s_gridSize; j++) {
int max = getMax(new int[] { getHorizontalProduct(i, j, numberGrid),
getVerticalProdut(i, j, numberGrid), getDiagonalProductA(i, j, numberGrid),
getDiagonalProductB(i, j, numberGrid) });
if (max > maxProduct)
maxProduct = max;
}
return maxProduct;
}
private int getHorizontalProduct(int iIndex, int jIndex, int[][] numberGrid) {
if (iIndex > Problem_11.s_gridSize - 4)
return 0;
else
return numberGrid[iIndex][jIndex] * numberGrid[iIndex + 1][jIndex] * numberGrid[iIndex + 2][jIndex]
* numberGrid[iIndex + 3][jIndex];
}
private int getVerticalProdut(int iIndex, int jIndex, int[][] numberGrid) {
if (jIndex > Problem_11.s_gridSize - 4)
return 0;
else
return numberGrid[iIndex][jIndex] * numberGrid[iIndex][jIndex + 1] * numberGrid[iIndex][jIndex + 2]
* numberGrid[iIndex][jIndex + 3];
}
private int getDiagonalProductA(int iIndex, int jIndex, int[][] numberGrid) {
if (iIndex > Problem_11.s_gridSize - 4 || jIndex > Problem_11.s_gridSize - 4)
return 0;
else
return numberGrid[iIndex][jIndex] * numberGrid[iIndex + 1][jIndex + 1] * numberGrid[iIndex + 2][jIndex + 2]
* numberGrid[iIndex + 3][jIndex + 3];
}
private int getDiagonalProductB(int iIndex, int jIndex, int[][] numberGrid) {
if (iIndex > Problem_11.s_gridSize - 4 || jIndex < 3)
return 0;
else
return numberGrid[iIndex][jIndex] * numberGrid[iIndex + 1][jIndex - 1] * numberGrid[iIndex + 2][jIndex - 2]
* numberGrid[iIndex + 3][jIndex - 3];
}
private int getMax(int... numbers) {
int max = numbers[0];
for (int i = 1; i < numbers.length; i++)
if (numbers[i] > max)
max = numbers[i];
return max;
}
public static int[][] getNumbersGrid(String fileName) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName));
int[][] numberGrid = new int[Problem_11.s_gridSize][];
for (int i = 0; i < Problem_11.s_gridSize; i++) {
numberGrid[i] = new int[Problem_11.s_gridSize];
String[] nums = bufferedReader.readLine().split(" ");
for (int j = 0; j < Problem_11.s_gridSize; j++)
numberGrid[i][j] = Integer.parseInt(nums[j]);
}
return numberGrid;
}
public static void main(String[] args) throws IOException {
String fileName = "problem_11.in";
System.out.println(new Problem_11().getMaxProduct(Problem_11.getNumbersGrid(fileName)));
}
}
Popularity: 6% [?]
Related posts:
