Skip to content

Instantly share code, notes, and snippets.

@chidiwilliams
Created December 3, 2021 12:09
Show Gist options
  • Select an option

  • Save chidiwilliams/53f59ec7f88f0c70ad744f16c2a4b288 to your computer and use it in GitHub Desktop.

Select an option

Save chidiwilliams/53f59ec7f88f0c70ad744f16c2a4b288 to your computer and use it in GitHub Desktop.

Revisions

  1. chidiwilliams created this gist Dec 3, 2021.
    59 changes: 59 additions & 0 deletions binary-diagnostic.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,59 @@
    function getProductOfOxyAndCo2(list) {
    const len = list[0].length;

    let oxy = [...list];
    let co2 = [...list];

    while (true) {
    let oxyDone = false;
    let co2Done = false;

    for (let i = 0; i < len && (!oxyDone || !co2Done); i++) {
    if (!oxyDone) {
    let numZeroes = 0;
    let numOnes = 0;

    for (let j = 0; j < oxy.length; j++) {
    if (oxy[j][i] === '0') {
    numZeroes++;
    } else {
    numOnes++;
    }
    }

    const mcb = +(numOnes >= numZeroes);

    oxy = oxy.filter((item) => item[i] === String(mcb));
    if (oxy.length === 1) {
    oxyDone = true;
    }
    }

    if (!co2Done) {
    let numZeroes = 0;
    let numOnes = 0;

    for (let j = 0; j < co2.length; j++) {
    if (co2[j][i] === '0') {
    numZeroes++;
    } else {
    numOnes++;
    }
    }

    const lcb = +(numZeroes > numOnes);

    co2 = co2.filter((item) => item[i] === String(lcb));
    if (co2.length === 1) {
    co2Done = true;
    }
    }
    }

    if (oxyDone && co2Done) {
    break;
    }
    }

    return parseInt(oxy[0], 2) * parseInt(co2[0], 2);
    }