Day 17 Part 1 WIP
This commit is contained in:
99
2024/17/index.ts
Normal file
99
2024/17/index.ts
Normal file
@@ -0,0 +1,99 @@
|
||||
const fs = require('fs');
|
||||
|
||||
const input = fs.readFileSync(__dirname + '/input.txt', 'utf8');
|
||||
|
||||
const lines = input.split("\n");
|
||||
|
||||
let registerA = parseInt(lines[0].split(' ')[2]);
|
||||
let registerB = parseInt(lines[1].split(' ')[2]);
|
||||
let registerC = parseInt(lines[2].split(' ')[2]);
|
||||
|
||||
let output: Array<number> = [];
|
||||
|
||||
const instructions = lines[4].split(' ')[1].split(',').map((i: string) => parseInt(i));
|
||||
|
||||
let pointer = 0;
|
||||
|
||||
function combo(op: number): number {
|
||||
if (op <= 3) {
|
||||
return op;
|
||||
}
|
||||
if (op === 4) {
|
||||
return registerA;
|
||||
}
|
||||
if (op === 5) {
|
||||
return registerB;
|
||||
}
|
||||
if (op === 6) {
|
||||
return registerC;
|
||||
}
|
||||
return op;
|
||||
}
|
||||
|
||||
function call(ins: number, op: number) {
|
||||
if (ins === 0) {
|
||||
op = combo(op);
|
||||
registerA = Math.round(registerA / (2 ** op));
|
||||
return;
|
||||
}
|
||||
if (ins === 1) {
|
||||
registerB = registerB ^ op;
|
||||
return;
|
||||
}
|
||||
if (ins === 2) {
|
||||
op = combo(op);
|
||||
registerB = op % 8;
|
||||
return;
|
||||
}
|
||||
if (ins === 4) {
|
||||
registerB = registerB ^ registerC;
|
||||
return;
|
||||
}
|
||||
if (ins === 5) {
|
||||
op = combo(op);
|
||||
output.push(op % 8);
|
||||
return;
|
||||
}
|
||||
if (ins === 6) {
|
||||
op = combo(op);
|
||||
registerB = Math.round(registerA / (2 ** op));
|
||||
return;
|
||||
}
|
||||
if (ins === 7) {
|
||||
op = combo(op);
|
||||
registerC = Math.round(registerA / (2 ** op));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
function printPC() {
|
||||
console.log(`
|
||||
A: ${registerA}
|
||||
B: ${registerB}
|
||||
C: ${registerC}
|
||||
|
||||
ins: ${typeof instructions[pointer] !== 'undefined' ? instructions[pointer] : 'NA'}
|
||||
op: ${typeof instructions[pointer+1] !== 'undefined' ? instructions[pointer+1] : 'NA'}
|
||||
combo: ${typeof instructions[pointer+1] !== 'undefined' ? combo(instructions[pointer+1]) : 'NA'}
|
||||
|
||||
Output: ${output.join(',')}
|
||||
`);
|
||||
}
|
||||
|
||||
function run() {
|
||||
while (pointer < instructions.length) {
|
||||
printPC();
|
||||
const ins = instructions[pointer];
|
||||
const op = instructions[pointer + 1];
|
||||
|
||||
if (ins === 3) {
|
||||
pointer = registerA === 0 ? pointer + 2 : op;
|
||||
} else {
|
||||
call(ins, op);
|
||||
pointer += 2;
|
||||
}
|
||||
}
|
||||
printPC();
|
||||
}
|
||||
|
||||
run();
|
||||
Reference in New Issue
Block a user