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