This commit is contained in:
2017-12-25 23:22:40 +00:00
parent d5fbba3277
commit 47510ec0ff
24 changed files with 2002 additions and 0 deletions

41
day18/input.txt Normal file
View File

@ -0,0 +1,41 @@
set i 31
set a 1
mul p 17
jgz p p
mul a 2
add i -1
jgz i -2
add a -1
set i 127
set p 622
mul p 8505
mod p a
mul p 129749
add p 12345
mod p a
set b p
mod b 10000
snd b
add i -1
jgz i -9
jgz a 3
rcv b
jgz b -1
set f 0
set i 126
rcv a
rcv b
set p a
mul p -1
add p b
jgz p 4
snd a
set a b
jgz 1 3
snd b
set f 1
add i -1
jgz i -11
snd a
jgz f -16
jgz a -19

39
day18/part1.js Normal file
View File

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

54
day18/part2.js Normal file
View File

@ -0,0 +1,54 @@
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]);