In the code below, I wrote (4 - 1) instead of just 3.
It looks kind of dumb, but I see logic in this type of decisions, it described in the comments. Don’t know: people do stuff like that or not?
Let me know, if link to the challenge is required, my question above is not about ‘how to solve this’, so I didn’t post the link right away.
function largestGridProduct(arr) {
let size = arr.length;
let maxProduct = 0;
for (let i = 0; i < size; i++) {
for (let j = 0; j < size; j++) {
//to check all horizontal products
if (j <= size - 4) {
let testProduct = arr[i][j];
for (let n = 1; n < 4; n++) {
testProduct *= arr[i][j + n];
}
if (testProduct > maxProduct) {maxProduct = testProduct;}
//nest another if block >>> also can check L to R diagonal products
if (i <= size - 4) {
let testProduct = arr[i][j];
for (let n = 1; n < 4; n++) {
testProduct *= arr[i + n][j + n];
}
if (testProduct > maxProduct) {maxProduct = testProduct;}
}
}
//to check all vertical and R to L diagonal products
//use symmetric if logic
if (i <= size - 4) {
let testProduct = arr[i][j];
for (let n = 1; n < 4; n++) {
testProduct *= arr[i + n][j];
}
if (testProduct > maxProduct) {maxProduct = testProduct;}
//in the below (4 - 1) expression used instead of (3) intentionally:
//all occurances of 4 in this code can be replaced with parameter
//if function will be modified to:
//find largest product of n adjacent numbers in NxN grid
if (j >= 4 - 1) {
let testProduct = arr[i][j];
for (let n = 1; n < 4; n++) {
testProduct *= arr[i + n][j - n];
}
if (testProduct > maxProduct) {maxProduct = testProduct;}
}
}
}
}
return maxProduct;
}