all done
This commit is contained in:
41
day18/input.txt
Normal file
41
day18/input.txt
Normal 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
39
day18/part1.js
Normal 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
54
day18/part2.js
Normal 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]);
|
Reference in New Issue
Block a user