adventofcode-2017/day18/part2.js
2017-12-25 23:22:40 +00:00

55 lines
1.3 KiB
JavaScript

var pc = [0,0];
var registers = [{p: 0}, {p: 1}];
var lastsnd = [0,0];
var queue = [[],[]];
var instructions = require("fs").readFileSync("input.txt").toString().split("\n").filter((a)=>(a));
var deadlock = 0;
var numSends = [0, 0];
while(deadlock < 2){
deadlock = 0;
for(var p = 0; p <= 1; p++){
if((pc[p] >= 0) && (pc[p] < instructions.length)){
val = a => ((isNaN(parseInt(a))) ? (registers[p][a]) : (parseInt(a)));
var instruction = instructions[pc[p]];
var parts = instruction.split(" ");
switch(parts[0]){
case "snd":
numSends[p]++;
queue[1-p].push(val(parts[1]));
break;
case "set":
registers[p][parts[1]] = val(parts[2]);
break;
case "add":
registers[p][parts[1]] += val(parts[2]);
break;
case "mul":
registers[p][parts[1]] *= val(parts[2]);
break;
case "mod":
registers[p][parts[1]] = registers[p][parts[1]] % val(parts[2]);
break;
case "rcv":
if(queue[p].length >= 1){
registers[p][parts[1]] = queue[p].splice(0,1)[0];
}
else{
pc[p]--;
deadlock++;
}
break;
case "jgz":
if(val(parts[1]) > 0){
pc[p] += (val(parts[2]) - 1);
}
break;
}
pc[p]++;
}
else{
deadlock++;
}
}
}
console.log(numSends[1]);