Advent of Code 2023-15
radulle
javascript
2 years ago
1.1 kB
40
Indexable
function solve(input) {
return process(parse(input));
}
function parse(input) {
return input.trim().split(",");
}
function process(data) {
let label, lens, h;
const boxes = Array(256).fill().map(() => []);
for (let i = 0; i < data.length; i++) {
if (data[i].includes("-")) {
label = data[i].replace("-", "");
for (let j = 0; j < boxes.length; j++) {
for (let k = 0; k < boxes[j].length; k++)
if (boxes[j][k].split(" ")[0] === label) boxes[j].splice(k, 1);
}
}
if (data[i].includes("=")) {
([label, lens] = data[i].split("=")), (h = hash(label));
const I = boxes[h].findIndex((e) => e.split(" ")[0] === label);
if (I === -1) boxes[h].push(label + " " + lens);
else boxes[h][I] = label + " " + lens;
}
}
return [
data.map((e) => hash(e)).reduce((acc, cur) => acc + cur, 0),
boxes.reduce((acc, cur, i) => acc + (i + 1) * cur.reduce((a, c, j) => a + (j + 1) * +c.split(" ")[1], 0), 0),
];
}
function hash(str) {
let v = 0;
for (let i = 0; i < str.length; i++) (v += str.charCodeAt(i)), (v *= 17), (v %= 256);
return v;
}
Editor is loading...
Leave a Comment