using System.Text.RegularExpressions;
public static class Program
private const string input2 = @" 1
public static void Main(string[] args)
int[,] convertedTriangle2 = input2.convertTo2DArrayWithoutSpaces();
int maxSum2 = convertedTriangle2.moveDownwards();
Console.WriteLine("The result for Question2 : " + maxSum2);
if (maxSum2 == 0 || maxSum2 == -1)
Console.WriteLine("There is no possible path");
public static int moveDownwards(this int[,] matrixOfTriangle)
int length = matrixOfTriangle.GetLength(0);
for (int i = 0; i < length - 2; i++)
res = Math.Max(res, matrixOfTriangle[0, i]);
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 = calculateNodeValue(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 = calculateNodeValue(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 = calculateNodeValue(matrixOfTriangle[i - 1, j],
matrixOfTriangle[i - 1, j - 1]);
matrixOfTriangle[i, j] = -1;
matrixOfTriangle[i, j] += tmp;
res = Math.Max(matrixOfTriangle[i, j], res);
public static int[,] convertTo2DArrayWithoutSpaces(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]+")
.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 calculateNodeValue(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;