JSFiddle - React, Tailwind, and code Playground

HTML

N:<input id="size" type="value" value="10"/>
    <input id="generate" type="button" value="generate"/>
    <div id="output"></div>

CSS

table{
            border-collapse: collapse;
        }
        td{
            border:1px solid black;
            width:20px;
            height:20px;
        }
        .simil{
            background-color: #cccccc;
        }

JavaScript

function mmprod(A,B){
    var bw = B[0].length;
    var M = [];
    A.forEach((x,i)=>{
        var ab_i = [];
        for(var k = 0; k<bw; ++k){

            var ab_ik = x.reduce((s,xij, j)=>{
                return s+B[j][k]*xij;
            },0);
            ab_i.push(ab_ik%2);
        }
        M.push(ab_i);
    })
    return M;
}
function mvprod(A,v){
    return A.map((x,i)=>{
        return x.reduce((acc,xij,j)=>{
            return acc + xij*v[j];
        },0)
    })
}
function buildA(N, density=0.5){
    var build = function(lower){
        var A = new Array(N).fill(0).map((x,i)=>{
            return new Array(N).fill(0).map((y,j)=>{
                if(lower(i,j)){
                    return Math.random()>density?1:0;
                }
                if(i==j){
                    return 1;
                }
                return y;
            })
        });
        return A;
    }
    var L = build((i,j)=>j<i);
    var U = build((i,j)=>j>i);
    return mmprod(L,U);
}

function perms(v, cbk){
    //https://stackoverflow.com/questions/9960908/permutations-in-javascript
    const permute = (arr, m = []) => {
        if (arr.length === 0) {
            return cbk(m);
        } 
        for (let i = 0; i < arr.length; i++) {
            let curr = arr.slice();
            let next = curr.splice(i, 1);
            var ok = permute(curr.slice(), m.concat(next));
            if(!ok) return ok;
        }
        return true;
    }
    return permute(v);
}
function doubletXB(A, x){
    const N = A.length;
    x = x.concat(new Array(N-x.length).fill(0));
    var Xg, Bg;
    perms(x, function(c){
        var X = c.slice(0);
        var x2 = c.slice(0);
        for(var i = 0; i<c.length; ++i){
            if(c[i]==0){
                x2[i]=1;
            }
        }
        if(mvprod(A,x2).map(y=>y<=N).every(x=>x)){
            Bg = mvprod(A,X);
            Xg = X;
            return false;
        }
        return true;
    })
    return [Xg,Bg];

}

function...