JSFiddle - React, Tailwind, and code Playground
by nomadev
JavaScript
function* cartesianProductGen(head, ...tail) {
let remainder = tail.length ? cartesianProductGen(...tail) : [[]];
for (let r of remainder) for (let h of head) yield [h, ...r];
}
function stones(n, a, b) {
const combinations = {};
const valuesToCombine = [];
for(let k = 0; k < n-1; k++) {
valuesToCombine.push([a,b]);
}
const perm = cartesianProductGen(...valuesToCombine);
while(true) {
const next = perm.next();
if (next.done) break;
// use object to avoid check on double insertion
combinations[next.value.reduce((acc, val) => acc + val)] = true;
}
return Object.keys(combinations)
}
function calcPossibilities(n, values) {
n = n - 1;
const blocks2 = [
[0,0],
[0,1],
[1,0],
[1,1]
]
const blocks3 = [
[0,0,0],
[0,0,1],
[0,1,0],
[1,0,0],
[0,1,1],
[1,0,1],
[1,1,0],
[1,1,1]
]
const possibilities = [];
if(n % 2 === 0) {
const times = n / 2;
for(let i = 0; i < 2**n; i++) {
const row = [];
for(let k = 0; k < times; k++) {
let trueIndex = k;
if(k > 0) {
}
row.push()
console.log(times, blocks2[k])
/*for(let j = 0; j < blocks2.length; j++) {
for(let i = 0; i < blocks2.length; i++) {
possibilities.push(blocks2[j].concat(blocks2[i]));
}
}*/
}
possibilities.push(row);
}
} else {
}
console.log(possibilities);
/*for(let k = 0; k < n * .5; k++) {
if(block[k] === 0)
block[k] = 1;
else if (block[k + 1] === 0) {
block[k] = 0;
block[k + 1] = 1;
}
else if (block)
const newBlock = Object.assign({}, block, {});
}*/
/*
function cartesianIteration(block, k = 0) {
if(block[k] === 0)
block[k] = 1;
else if (block[k + 1] === 0) {
block[k] = 0;
return cartesianIteration(block, k + 1);
} else if (block)
const newBlock = Object.assign({}, block, {});
}
*/
const block =...