private static ProductAndFactors GetLargestProductFromUpperLeftHalfOfMatrix(List <List <int> > numberGrid, int countOfAdjacentNumbers) { var result = new ProductAndFactors(); for (var i = numberGrid.Count - 1; i >= countOfAdjacentNumbers - 1; i--) { var startingPointRow = i; var startingPointColumn = 0; var series = new List <int>(); for (var j = 0; j <= i; j++) { series.Add(numberGrid[startingPointRow - j][startingPointColumn + j]); } var currentColumn = ProductInSeries.GetLargestProductInASeries(series, countOfAdjacentNumbers); if (currentColumn.Product <= result.Product) { continue; } result.Product = currentColumn.Product; result.Factors.Clear(); result.Factors = currentColumn.Factors; } return(result); }
private static ProductAndFactors GetLargestProductHorizontally(List <List <int> > numberGrid, int countOfAdjacentNumbers) { var result = new ProductAndFactors(); foreach (var row in numberGrid) { var currentRow = ProductInSeries.GetLargestProductInASeries(row, countOfAdjacentNumbers); if (currentRow.Product <= result.Product) { continue; } result.Product = currentRow.Product; result.Factors.Clear(); result.Factors = currentRow.Factors; } return(result); }
private static ProductAndFactors GetLargestProductVertically(List <List <int> > numberGrid, int countOfAdjacentNumbers) { var result = new ProductAndFactors(); for (var i = 0; i < numberGrid.Count; i++) { var series = new List <int>(); foreach (var row in numberGrid) { series.Add(row[i]); } var currentColumn = ProductInSeries.GetLargestProductInASeries(series, countOfAdjacentNumbers); if (currentColumn.Product <= result.Product) { continue; } result.Product = currentColumn.Product; result.Factors.Clear(); result.Factors = currentColumn.Factors; } return(result); }