JSFiddle - React, Tailwind, and code Playground
by SwampFall
HTML
<div id="d1">
</div>
JavaScript
var div = document.getElementById("d1");
var rows = 3;
var cols = 3;
var arrGrids = [];
var arrSteps = [];
var gridCount = 0;
var count = 0;
solve();
function initGrid() {
var g = [];
for (var r = 0; r < rows; r++) {
g.push([]);
for (var c = 0; c < cols; c++) {
g[r].push(0);
}
}
arrGrids.push(g);
}
function solve() {
for (var r = 0; r < rows / 2; r++) {
for (var c = 0; c < cols / 2; c++) {
initGrid();
var grid = arrGrids[gridCount];
solveStep(r, c, 1, copy(grid), "");
}
}
}
function solveStep(r, c, stepCount, grid, steps) {
count++;
grid[r][c] = stepCount;
steps += r + "," + c + " ";
if (checkZero(grid) && count < 100) {
// c
grid = solveC(r, c, stepCount, getGrid(r, c, grid, 1), copy(steps));
// f
console.log(grid);
solveF(r, c, stepCount, getGrid(r, c, grid, 2), copy(steps));
// n
solveN(r, c, stepCount, getGrid(r, c, grid, false), copy(steps));
return true;
} else {
if (checkPositive(grid)) {
d = document.createElement("div");
d.innerHTML = steps + "<br>";
for (var rr = 0; rr < rows; rr++) {
for (var cc = 0; cc < cols; cc++) {
d.innerHTML += grid[rr][cc] + ", ";
}
d.innerHTML += "<br>";
}
div.appendChild(d);
gridCount++;
}
return true;
}
}
function solveC(r, c, stepCount, grid, steps) {
steps += "c";
for (var rr = r - 3; rr < r + 3; rr++) {
if (rr >= 0 && rr < rows) {
for (var cc = c - 3; cc < c + 3; cc++) {
if (cc >= 0 && cc < cols) {
if (grid[rr][cc] == 0) {
//solveStep(rr, cc, stepCount + 1, clean(grid), copy(steps)); // ^ don't want clean
grid[rr][cc] = stepCount + 1;
return clean(grid);
}
}
}
}
}
}
function solveF(r, c, stepCount, grid, steps) {
steps += "f";
for (var rr = r - 4; rr < r + 4; rr++) {
if (rr >= 0 && rr < rows) {
for (var cc = c - 4; cc < c + 4; cc++)...