DEV Community

Discussion on: Advent of Code 2020 Solution Megathread - Day 14: Docking Data

Collapse
 
kudostoy0u profile image
Kudos Beluga

Part 1 JS solution, Part 2 coming soon. I am angry with myself because I got stuck for 30 minutes on why my code wasn't giving the correct solution when I forgot to reset the bitmask when a new one is declared -_-

function bin(dec) {
    return (dec >>> 0).toString(2);
}

function pad(n, width, z) {
    z = z || '0';
    n = n + '';
    return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}
const fs = require("fs")
let data = fs.readFileSync("sinput.txt", "utf8").split("\n");
let memslots = {};
let mymask = {};
data.forEach(e => {
    if (e.split(" = ")[0] == "mask") {
        let amask = e.split(" = ")[1]
        mymask = {}
        for (let i = 0; i < amask.length; i++) {
            if (amask[i] != "X") {
                mymask[i] = amask[i];
            }
        }
    } else {
        let memtype = e.split("mem[")[1].split("]")[0];
        let integr = pad(bin(e.split(" = ")[1]), 36).split("")
        for (const [idx, val] of Object.entries(mymask)) {
            integr[Number(idx)] = val;
        }
        memslots[memtype] = integr.join("")
    }
})
let total = 0;
for (let num of Object.values(memslots)) {
    total += parseInt(num, 2)
}
console.log(total)
Enter fullscreen mode Exit fullscreen mode