28 lines
1 KiB
JavaScript
28 lines
1 KiB
JavaScript
|
// I wanted to do today's puzzle using bitwise operators, but it kept on spitting out negative numbers, so I gave up with that and ended up with this way that uses arrays and strings instead.
|
||
|
const fs = require('fs');
|
||
|
const input = fs.readFileSync('input.txt', 'utf-8').split('\n').map(l=>l.split(' = '));
|
||
|
|
||
|
let mask = [];
|
||
|
let mem = []
|
||
|
input.forEach(command => {
|
||
|
if (command[0] == 'mask') {
|
||
|
// convert the mask into an array
|
||
|
mask = command[1].split('')
|
||
|
} else {
|
||
|
// grab the number in mem[x]
|
||
|
let index = Number(command[0].substring(4,command[0].length-1));
|
||
|
// convert the arg to binary string
|
||
|
let value = Number(command[1]).toString(2)
|
||
|
// add 0s to front so it is the same length as the mask
|
||
|
while (value.length < mask.length) {
|
||
|
value = '0' + value
|
||
|
}
|
||
|
// run the value thru the mask and convert back to a Number
|
||
|
let result = parseInt(mask.map((m,i)=>m=='X'?value[i]:m).join(''),2)
|
||
|
// store the result
|
||
|
mem[index] = result
|
||
|
}
|
||
|
});
|
||
|
// log the total of mem
|
||
|
console.log(mem.reduce((a,b)=>a+b, 0))
|