Я пишу простой решатель судоку в качестве упражнения, и я подумал, что я покажу весь процесс, отображая его шаг за шагом на сетке 9x9.
Я использую таблицу HTML с вложенными div дляотображение игрового поля (вероятно, не актуально) и рекурсивная функция для решения заданного судоку.Мое решение сейчас находится в состоянии "спагетти", поэтому ниже я даю вам псевдокод для того, что у меня есть:
function fillBoard() {
for(let i = 0; i < 9; i++) {
for(let j = 0; j < 9; j++) {
const cell = document.querySelector(`div[data-row="${i}"][data-column="${j}"]`);
cell.innerHTML = gameState.solution[i][j];
}
}
}
function solve(row, column) {
/* simplified, it's working :) */
for(let guess = 1; guess < 10; guess++) {
this.solution[row][column] = guess; <--- SHOW THIS STEP TO USER
let conflicts = checkConflicts(row, column)
if(!conflicts) {
let emptyCell = this.findNextEmptyCell(row, column);
if(emptyCell) {
let result = this.solve(emptyCell.i, emptyCell.j);
if(!result) continue;
else return true;
}
return true;
}
else continue;
}
}
Я пытался поместить fillBoard()
вызов функции внутри solve()
, но это, очевидно, неЭто сработало, так как я получаю только конечный результат в виде решенной сетки.Я также пытался использовать setInterval(fillBoard, 100)
, но функция solve()
выполняется слишком быстро.
Как можно добиться «инкрементного» отображения всего процесса решения путем обновления HTML после каждого вызова solve()
?
Я пытаюсь получить что-то вроде этого: https://www.youtube.com/watch?v=ChjQRIhH414 но я заполняю доску слева направо, сверху вниз
Текущее решение: Codepen