import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import static java.util.Arrays.stream; import java.util.logging.Level; import java.util.logging.Logger; public class Main { public static void main(String[] args) { System.out.println("Maximum Sum : " + findSum("file.txt")); } public static int findSum(String filename) { // Get triangle array from file int[][] numbers = null; try { numbers = Files.lines(Paths.get(filename)).map(s -> stream(s.trim().split("\\s+")).mapToInt(Integer::parseInt).toArray()).toArray(int[][]::new); } catch (IOException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } // Write triangle array for (int i = 0; i < numbers.length; i++) { for (int j = 0; j < numbers[i].length; j++) { System.out.printf(numbers[i][j] + " "); } System.out.printf("\n"); } // Get maximum sum with controls int sum = 0; for (int rowIndex = numbers.length - 1; rowIndex > 0; rowIndex--) { for (int columnIndex = 0; columnIndex < numbers[rowIndex].length - 1; columnIndex++) { if (!isPrime(numbers[rowIndex - 1][columnIndex]) || (rowIndex == 1)) { if (rowIndex == numbers.length - 1) { int max = Math.max(isPrime(numbers[rowIndex][columnIndex]) ? 0 : numbers[rowIndex][columnIndex], isPrime(numbers[rowIndex][columnIndex + 1]) ? 0 : numbers[rowIndex][columnIndex + 1]); numbers[rowIndex - 1][columnIndex] += max; } else { int max = Math.max(numbers[rowIndex][columnIndex], numbers[rowIndex][columnIndex + 1]); numbers[rowIndex - 1][columnIndex] += max; } sum = numbers[rowIndex - 1][columnIndex]; } else { // If it is prime number numbers[rowIndex - 1][columnIndex] = 0; sum = numbers[rowIndex - 1][columnIndex]; } } } return sum; } // A function which we can get 'true' if given number is prime public static boolean isPrime(int number) { if (number <= 1) { return false; } for (int i = 2; i <= Math.sqrt(number); i++) { if (number % i == 0) { return false; } } return true; } }