using System.Text.RegularExpressions;
public static class Program
public static void Main()
Console.WriteLine("Enter the file path: (Ex: " + @"D:\input.txt" + ")");
string cs = Console.ReadLine();
string contents = File.ReadAllText(cs);
int[,] convertedTriangleFile = contents.RemoveSpaces();
int maxSumX = convertedTriangleFile.moveForward();
Console.WriteLine("The result from File " + maxSumX);
private static int moveForward(this int[,] matrixOfTriangle)
int length = matrixOfTriangle.GetLength(0);
for (int i = 1; i < length; i++)
for (int j = 0; j < length; j++)
if (j == 0 && matrixOfTriangle[i, j] != -1)
if (matrixOfTriangle[i - 1, j] != -1)
matrixOfTriangle[i, j] += matrixOfTriangle[i - 1, j];
matrixOfTriangle[i, j] = -1;
else if (j > 0 && j < length - 1 && matrixOfTriangle[i, j] != -1)
int tmp = calculateMaxValue(matrixOfTriangle[i - 1, j],
matrixOfTriangle[i - 1, j - 1]);
matrixOfTriangle[i, j] = -1;
matrixOfTriangle[i, j] += tmp;
else if (j > 0 && matrixOfTriangle[i, j] != -1)
int tmp = calculateMaxValue(matrixOfTriangle[i - 1, j],
matrixOfTriangle[i - 1, j - 1]);
matrixOfTriangle[i, j] = -1;
matrixOfTriangle[i, j] += tmp;
else if (j != 0 && j < length - 1 && matrixOfTriangle[i, j] != -1)
int tmp = calculateMaxValue(matrixOfTriangle[i - 1, j],
matrixOfTriangle[i - 1, j - 1]);
matrixOfTriangle[i, j] = -1;
matrixOfTriangle[i, j] += tmp;
res = Math.Max(matrixOfTriangle[i, j], res);
private static int[,] RemoveSpaces(this string input)
string[] array = input.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
int[,] matrixOfTriangle = new int[array.Length, array.Length + 1];
for (var row = 0; row < array.Length; row++)
int[] digitsInRow = Regex.Matches(array[row], "[0-9]+").Cast<Match>()
.Select(m => int.Parse(m.Value)).ToArray();
for (var column = 0; column < digitsInRow.Length; column++)
matrixOfTriangle[row, column] = digitsInRow[column];
return matrixOfTriangle.removePrimeNumbers();
private static int calculateMaxValue(int input1, int input2)
if (input1 == -1 && input2 == -1 || input1 == 0 && input2 == 0)
return Math.Max(input1, input2);
private static bool isPrime(this int number)
for (var i = 3; (i * i) <= number; i += 2)
private static int[,] removePrimeNumbers(this int[,] matrixOfTriangle)
int length = matrixOfTriangle.GetLength(0);
for (var i = 0; i < length; i++)
for (var j = 0; j < length; j++)
if (matrixOfTriangle[i, j] == 0)
else if (isPrime(matrixOfTriangle[i, j]))
matrixOfTriangle[i, j] = -1;