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,...