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++)...