Day 8
🧩 Syntax:
const { getInputs } = require("../../lib/utils");
const inputs = getInputs(`${__dirname}/input.txt`, "\n");
const partOne = () => {
const [instruction, _, ...network] = inputs;
const networkMap = network.reduce((acc, curr) => {
const [s, conns] = curr.split(" = ");
if (!acc[s]) {
acc[s] = {};
}
const cleanConns = conns.replace("(", "").replace(")", "").split(", ");
acc[s]["L"] = cleanConns[0];
acc[s]["R"] = cleanConns[1];
return acc;
}, {});
let numOfSteps = 0;
let currNode = "AAA";
console.log(instruction, networkMap);
let instructionIdx = 0;
while (currNode !== "ZZZ") {
if (instructionIdx === instruction.length) {
instructionIdx = 0;
}
currNode = networkMap[currNode][instruction[instructionIdx]];
numOfSteps++;
instructionIdx++;
console.log(`After ${numOfSteps} at ${currNode}`);
}
return numOfSteps;
};
const gcd = (a, b) => {
if (b === 0) return a;
return gcd(b, a % b);
};
const lcm = (a, b) => {
return (a * b) / gcd(a, b);
};
const partTwo = () => {
const [instruction, _, ...network] = inputs;
const networkMap = network.reduce((acc, curr) => {
const [s, conns] = curr.split(" = ");
if (!acc[s]) {
acc[s] = {};
}
const cleanConns = conns.replace("(", "").replace(")", "").split(", ");
acc[s]["L"] = cleanConns[0];
acc[s]["R"] = cleanConns[1];
return acc;
}, {});
let numOfSteps = 0;
let currNodes = Object.keys(networkMap).filter((k) => k.endsWith("A"));
// console.log(instruction, networkMap);
let instructionIdx = 0;
const finalNums = [];
for (let k = 0; k < currNodes.length; k++) {
instructionIdx = 0;
numOfSteps = 0;
let currNode = currNodes[k];
while (!currNode.endsWith("Z")) {
if (instructionIdx === instruction.length) {
instructionIdx = 0;
}
currNode = networkMap[currNode][instruction[instructionIdx]];
numOfSteps++;
instructionIdx++;
console.log(`After ${numOfSteps} at ${currNode}`);
}
finalNums.push(numOfSteps);
}
console.log(finalNums);
const answer = finalNums.reduce((acc, curr) => lcm(acc, curr), 1);
return answer;
};
console.log("Res:", partTwo());