JSFiddle - React, Tailwind, and code Playground

HTML

<div id='r'>
    <br>
</div>

CSS

body {
    font-family:monospace;
    font-size: 18px;
}
td {
    width: 30px;
    height: 30px;
    border: 1px solid black;
    text-align:center;
    vertical-align:middle;
}

JavaScript

/* ======================== */
start = new Date();
/* ======================== */

var arr = [
[0,7,7,7,7,7,7,0,0,7,7,7,0,7,7,7,7,7,7,0,0],
[7,0,7,7,7,7,0,0,0,7,7,7,7,0,7,7,7,7,0,0,0],
[7,0,7,7,7,0,7,0,0,7,7,7,7,0,7,7,7,0,7,0,0],
[7,0,0,7,0,0,0,0,0,7,7,7,7,0,0,7,0,0,0,0,0],
[0,0,0,7,0,0,7,0,0,7,0,7,0,0,0,7,0,0,7,0,0],
[0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,0,0],
[7,7,7,0,0,7,0,0,7,0,7,7,7,7,7,0,0,7,0,0,7],
[7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7],
[7,7,7,7,7,0,7,7,7,7,0,7,7,7,7,7,7,0,7,7,7],
[0,7,0,7,7,7,0,7,0,7,7,7,0,7,0,7,7,7,0,7,0],
[7,7,7,7,7,7,7,7,0,7,7,0,7,7,7,7,7,7,7,7,0],
[7,7,0,7,7,7,0,7,7,7,7,7,7,7,0,7,7,7,0,7,7],
[0,7,7,7,7,7,7,0,0,7,7,7,0,7,7,7,7,7,7,0,0],
[7,0,7,7,7,7,0,0,0,7,7,7,7,0,7,7,7,7,0,0,0],
[7,0,7,7,7,0,7,0,0,7,7,7,7,0,7,7,7,0,7,0,0],
[7,0,0,7,0,0,0,0,0,7,7,7,7,0,0,7,0,0,0,0,0],
[0,0,0,7,0,0,7,0,0,7,0,7,0,0,0,7,0,0,7,0,0],
[0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,0,0],
[7,7,7,0,0,7,0,0,7,0,7,7,7,7,7,0,0,7,0,0,7],
[7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7],
[7,7,7,7,7,0,7,7,7,7,0,7,7,7,7,7,7,0,7,7,7]
];


var maxv = arr.length;
var maxh = arr[0].length;
var rsv = [];
var rsh = [];
pop_arr();
var shape;
try_sq();
try_rect();
try_loose();


/* ======================== */
end = new Date() - start;
write_msg('<br>TIME: ' + (end) + '<br><br>');
table();
/* ======================== */


//TRY SQUARE
function try_sq() {
    var sv, sh;
    shape = [];
    for (sv = 0; sv < maxv - 1; sv++) {
        for (sh = 0; sh < maxh - 1; sh++) {
            if (arr[sv][sh] === 0 || rsv[sv][sh] > -1 || rsh[sv][sh] > -1) {
                continue;
            }
            check_sq(sv, sh);
        }
    }
    if (shape.length > 0) {
        occu();
    }
}


//TRY RECT
function try_rect() {
    var sv, sh;
    var rect = false;
    do {
        shape = [];
        for (sv = 0; sv < maxv; sv++) {
            for (sh = 0; sh < maxh; sh++) {
                if (arr[sv][sh] === 0 || rsv[sv][sh] > -1 || rsh[sv][sh] > -1) continue;
                check_rec(sv,...