function laplace([i, j], val, grid) {
let sum = 0;
const center = grid[i][j];
sum += -1 * center[val];
const directNeighbors = [
[i - 1 < 0 ? colSize - 1 : i - 1, j],
[(i + 1) % colSize, j],
[i, j - 1 < 0 ? colSize - 1 : j - 1],
[i, (j + 1) % colSize]
];
directNeighbors.forEach(
([x, y]) => (sum += directNeighborWeight * grid[x][y][val])
);
const diagonalNeighbors = [
[(i + 1) % colSize, j - 1 < 0 ? colSize - 1 : j - 1],
[(i + 1) % colSize, (j + 1) % colSize],
[i - 1 < 0 ? colSize - 1 : i - 1, (j + 1) % colSize],
[i - 1 < 0 ? colSize - 1 : i - 1, j - 1 < 0 ? colSize - 1 : j - 1]
];
diagonalNeighbors.forEach(
([x, y]) => (sum += diagonalNeighborWeight * grid[x][y][val])
);
return sum;
}