Estoy escribiendo un algoritmo para resolver un sudoku y tengo un comportamiento extraño. Mi primer borrador a continuación no me dio un error, pero estaba modificando la matriz. Entonces me di cuenta (porque soy nuevo en JavaScript) que tengo que poner let antes de var en el bucle for, así que lo cambié.
El comportamiento extraño es que cuando lo cambio para dejar fila y dejar col en el ciclo for, ya no modifica la matriz de parámetros del rompecabezas. No entiendo cómo la adición de la palabra let al ciclo for cambia esto.
test = [ [8, 0, 6, 0, 1, 0, 0, 0, 0], [0, 0, 3, 0, 6, 4, 0, 9, 0], [9, 0, 0, 0, 0, 0, 8, 1, 6], [0, 8, 0, 3, 9, 6, 0, 0, 0], [7, 0, 2, 0, 4, 0, 3, 0, 9], [0, 0, 0, 5, 7, 2, 0, 8, 0], [5, 2, 1, 0, 0, 0, 0, 0, 4], [0, 3, 0, 7, 5, 0, 2, 0, 0], [0, 0, 0, 0, 2, 0, 1, 0, 5] ] let result = solve(test) console.log(result) printPuzzle(test) function solve(puzzle) { for (row = 0; row < 9; row++) { for (col = 0; col < 9; col++) { if (puzzle[row][col] === 0) { for (number = 1; number < 9; number++) { if (isValidPlacement(puzzle, number, row, col)) { puzzle[row][col] = number if (solve(puzzle)) { return true } else { puzzle[row][col] = 0 } } } return false } } } return true }