function parseInput2(input) {
return input
.trim()
.split('\n')
.map(line => {
line = line.split(' = ');
if (line[0].startsWith("mem")) {
line[0] = BigInt(line[0].substring(4, line[0].indexOf("]")));
line[1] = BigInt(line[1]);
} else {
const mask = line[1];
let and = [0n],
or = [0n];
let bit = 1n;
for (let i = mask.length - 1; i >= 0; i--) {
const char = mask[i];
if (char === "X") {
const length = and.length;
for (let i = 0; i < length; i++) {
and.push(and[i] + bit);
or.push(or[i] + bit);
}
} else if (char === "1") {
for (let i = 0; i < or.length; i++) {
and[i] += bit;
or[i] += bit;
}
} else if (char === "0") {
for (let i = 0; i < and.length; i++) {
and[i] += bit;
}
}
bit *= 2n;
}
line[1] = { mask, and, or };
}
return line;
});
}