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