adventofcode-2018/04/part2.js

47 lines
1.3 KiB
JavaScript
Raw Normal View History

2018-12-06 00:10:48 +00:00
var input = require("fs").readFileSync("input.txt").toString().split("\n").filter(a=>a);
var timeline = [];
var events = input.sort((a,b)=>{
var pa = a.match(/\[(\d+-\d+-\d+ (\d+):(\d+))\] (.*)/);
var pb = b.match(/\[(\d+-\d+-\d+ (\d+):(\d+))\] (.*)/);
return new Date(pa[1]).getTime() - new Date(pb[1]).getTime();
})
console.log(events);
var guards = [];
var lastGuard = -1;
for(var event of events){
var p = event.match(/\[(\d+-\d+-\d+ (\d+):(\d+))\] (.*)/);
var time = (parseInt(p[2])*60) + parseInt(p[3])
if(p[4].includes("begins shift")){
lastGuard = parseInt(p[4].match(/\#(\d+)/)[1]);
}
else{
if(!guards[lastGuard]){
guards[lastGuard] = [];
}
guards[lastGuard].push(time);
}
}
var guardMins = guards.map(times=>{
var mins = [];
for(var i = 0; i < times.length; i+=2){
for(var t = times[i]; t != times[i+1]; t=(t+1)%(24*60)){
console.log(t);
if(!mins[t]){
mins[t] = 0;
}
mins[t]++;
}
}
return mins;
});
console.log(guards);
var mostInMin = Math.max.apply(null, guardMins.reduce((a,b)=>(a.concat(b))).filter(a=>a));
console.log(mostInMin);
var bestGuard = guardMins.indexOf(guardMins.filter(a=>(a.indexOf(mostInMin) != -1))[0]);
var bestMin = guardMins[bestGuard].indexOf(mostInMin);
console.log(bestGuard, bestMin, bestGuard * bestMin);