function build(circuit, memo = new Map()) {
const evaluate = (wire) => {
if (!isNaN(Number(wire))) {
return Number(wire);
}
if (memo.has(wire)) {
return memo.get(wire);
}
const expr = circuit.get(wire);
const value =
expr.length === 1
? evaluate(expr[0])
: expr[0] === "NOT"
? ~evaluate(expr[1])
: operators[expr[1]](evaluate(expr[0]), evaluate(expr[2]));
memo.set(wire, value);
return value;
};
return evaluate("a");
}