45 lines
1.0 KiB
JavaScript
45 lines
1.0 KiB
JavaScript
|
var input = require("fs").readFileSync("input.txt").toString().split("\n").filter(a=>a);
|
||
|
var moves = input.map(line=>(line.split(" "))).map(a=>([a[1], a[7]]));
|
||
|
|
||
|
var statesObj = {};
|
||
|
for(var state of moves.map(a=>(a[0])).concat(moves.map(a=>(a[1])))){
|
||
|
statesObj[state] = 0;
|
||
|
}
|
||
|
var states = Object.keys(statesObj);
|
||
|
var visited = [];
|
||
|
|
||
|
var workers = [
|
||
|
[0, ""],
|
||
|
[0, ""],
|
||
|
[0, ""],
|
||
|
[0, ""],
|
||
|
[0, ""],
|
||
|
]
|
||
|
|
||
|
var i = -1;
|
||
|
|
||
|
while(visited.length < states.length){
|
||
|
for(var worker of workers){
|
||
|
if(worker[0] == 0){
|
||
|
if(worker[1]){
|
||
|
visited.push(worker[1]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
var possibleMoves = states.filter(s=>(moves.filter(m=>(m[1]==s)).map(m=>(m[0])).filter(ms=>(visited.indexOf(ms) == -1)).length == 0)).filter(s=>(visited.indexOf(s) == -1)).filter(s=>(workers.map(w=>(w[1])).indexOf(s) == -1)).sort();
|
||
|
for(var worker of workers){
|
||
|
if(worker[0] == 0){
|
||
|
worker[1] = possibleMoves.shift();
|
||
|
if(worker[1]){
|
||
|
worker[0] = worker[1].charCodeAt(0) - "A".charCodeAt(0);
|
||
|
worker[0] += 60;
|
||
|
}
|
||
|
}
|
||
|
else{
|
||
|
worker[0]--;
|
||
|
}
|
||
|
}
|
||
|
i++;
|
||
|
}
|
||
|
console.log(i);
|