static void Main(string[] args) { var grid = Grid2d.Parse(Properties.Resources.GridP11); var allPaths = new IEnumerable <int[]>[] { GetHorizontalPaths(grid), GetVerticalPaths(grid), GetDiagonalNESWPaths(grid), GetDiagonalNWSEPaths(grid) }.SelectMany(e => e); var result = allPaths.Select( path => path[0] * path[1] * path[2] * path[3] ).Max(); Console.WriteLine(result); Console.ReadLine(); }