Quiero completar una matriz 2D de números con patrón de serpiente, probé este algoritmo pero el resultado no es el esperado:
function fill2d(c,l) { var arr = new Array[l][c]; let counter = 0; for (let col = 0; col < arr.l; col++) { if (col % 2 == 0) { for (let row = 0; row < arr.l; row++) { arr[row][col] = counter++; } } else { for (let row = arr.length - 1; row >= 0; row--) { arr[row][col] = counter++; } } } return arr; } fill2d(4,4)algo como eso :
1 2 3 4 8 7 6 5 9 10 11 12 16 15 14 13De acuerdo, básicamente todo lo que necesitas es recorrer fila por fila, pero alternando entre izquierda a derecha y derecha a izquierda. Aquí está mi solución:
function fill2d(c, l) { let arr = new Array(l); for (var i = 0; i < l; i++) { arr[i] = new Array(c); } let count = 1; for (let i = 0; i < l; i++) { console.log("i: ", i); let right_to_left = i % 2; for (let j = (right_to_left * (l - 1)); (right_to_left ? (j >= 0) : (j < c)); j += (right_to_left ? -1 : 1)) { console.log("j: ", j); arr[i][j] = count++; } } return arr; } console.log(fill2d(4, 4));Además, no estaba asignando una matriz 2d correctamente, primero debe asignar una matriz 1d y luego asignar una matriz para cada uno de los elementos de esa matriz.
Nota: agregué registros para cada i y j para que pueda ver cómo se atraviesa la matriz.