Project Euler Problem #15
So, the answer was staring at me all along. No, really. Look at this picture:
On the left is a bog-standard Pascal Triangle. On the right is the example problem on the Project Euler website. I drew this diagram on paper, and what immediately leaped out of me was that the number I need (the single highest integer in the array) doesn’t change a whit if you trim out the side elements.
The only modification to my code was to add a small equation I (re)discovered: The total number of rows in the triangle I need to crunch are equal to twice the length of one side of the square, plus one:
// 20x20 long z = 20; long a = (2 * z) +1;
Crunch a 41-line triangle and output the highest integer on the last row.
Yay!
using System;
using System.Linq;
public class Fifteen
{
static void Main()
{
long z = 20;
long a = (2 * z) +1;
long[][] b = new long[a][];
for (int i = 0; i < a; i++)
b[i] = new long[i + 1];
b[0][0] = 1;
for (int i = 1; i < a; i++)
for (int j = 0; j < b[i].Length; j++)
{
if (j == 0)
b[i][j] = b[i-1][j];
if ((j > 0) && (j < b[i].Length-1))
b[i][j] = b[i-1][j-1] + b[i-1][j];
if (j == (b[i].Length -1))
b[i][j] = b[i-1][j-1];
}
Console.WriteLine("\n{0}\n", b[a-1].Max());
}
}
Categorised as: programming
