Skip to content

Instantly share code, notes, and snippets.

@towc
Created December 19, 2018 11:02
Show Gist options
  • Save towc/064b8d2ada54258d7837fc2b36c021e6 to your computer and use it in GitHub Desktop.
Save towc/064b8d2ada54258d7837fc2b36c021e6 to your computer and use it in GitHub Desktop.
// C ← op(A, B)
let beforeIp;
let ip = 0;
let ipReg;
const regs = [1, 0, 0, 0, 0, 0];
const instructions = {
setIp: (value, regs) => { beforeIp = regs[value]; ipReg = value; regs[value] = ip; },
seti: ([a,b,c], r) => r[c] = a,
setr: ([a,b,c], r) => r[c] = r[a],
addi: ([a,b,c], r) => r[c] = r[a] + b,
addr: ([a,b,c], r) => r[c] = r[a] + r[b],
muli: ([a,b,c], r) => r[c] = r[a] * b,
mulr: ([a,b,c], r) => r[c] = r[a] * r[b],
bani: ([a,b,c], r) => r[c] = r[a] & b,
banr: ([a,b,c], r) => r[c] = r[a] & r[b],
bori: ([a,b,c], r) => r[c] = r[a] | b,
borr: ([a,b,c], r) => r[c] = r[a] | r[b],
gtir: ([a,b,c], r) => r[c] = Number(a > r[b]),
gtri: ([a,b,c], r) => r[c] = Number(r[a] > b),
gtrr: ([a,b,c], r) => r[c] = Number(r[a] > r[b]),
eqir: ([a,b,c], r) => r[c] = Number(a === r[b]),
eqri: ([a,b,c], r) => r[c] = Number(r[a] === b),
eqrr: ([a,b,c], r) => r[c] = Number(r[a] === r[b]),
}
const program = require('fs').readFileSync('aoc-input-19', 'utf-8').trim()
.split('\n')
.map(line => {
if (line.startsWith('#ip')) {
return {
action: instructions.setIp,
value: Number(line.split(' ')[1]),
line,
}
} else {
const [inst, ...args] = line.split(' ');
return {
action: instructions[inst],
value: args.map(Number),
line,
};
}
});
//apparently this instruction is not part of the program
const ipSetter = program.shift();
ipSetter.action(ipSetter.value, regs);
// 10551343
// part 2 doesn't really complete, but observation shows what formula to use to compute the result
// for part 1, uncomment next line
//regs[0] = 0;
let gen = 0;
while(ip >= 0 && ip < program.length) {
++gen;
const instr = program[ip];
instr.action(instr.value, regs);
if (ipReg) {
++regs[ipReg];
ip = regs[ipReg];
} else {
++ip;
}
}
console.log(gen, regs);
#ip 3
addi 3 16 3
seti 1 8 5
seti 1 0 4
mulr 5 4 2
eqrr 2 1 2
addr 2 3 3
addi 3 1 3
addr 5 0 0
addi 4 1 4
gtrr 4 1 2
addr 3 2 3
seti 2 3 3
addi 5 1 5
gtrr 5 1 2
addr 2 3 3
seti 1 4 3
mulr 3 3 3
addi 1 2 1
mulr 1 1 1
mulr 3 1 1
muli 1 11 1
addi 2 4 2
mulr 2 3 2
addi 2 19 2
addr 1 2 1
addr 3 0 3
seti 0 7 3
setr 3 2 2
mulr 2 3 2
addr 3 2 2
mulr 3 2 2
muli 2 14 2
mulr 2 3 2
addr 1 2 1
seti 0 1 0
seti 0 5 3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment