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]);