lifeSupport = (input) => {
const lines = input.split("\n").map((n) => parseInt(n, 2));
const numBits = input.split("\n")[0].length;
let o2 = [...lines],
co2 = [...lines];
for (let i = 0; i < numBits && o2.length > 1; i++) {
const pos = numBits - i;
let [zeros, ones] = o2.reduce(
(acc, num) => {
acc[getBit(num, pos)]++;
return acc;
},
[0, 0]
);
let target = zeros === ones ? 1 : zeros > ones ? 0 : 1;
o2 = o2.filter(matchBit(target, pos));
}
for (let i = 0; i < numBits && co2.length > 1; i++) {
const pos = numBits - i;
let [zeros, ones] = co2.reduce(
(acc, num) => {
acc[getBit(num, pos)]++;
return acc;
},
[0, 0]
);
let target = zeros === ones ? 0 : zeros < ones ? 0 : 1;
co2 = co2.filter(matchBit(target, pos));
}
return { o2: o2[0], co2: co2[0], answer: o2[0] * co2[0] };
}