adventofcode-2018/04/part1.js

60 lines
1.5 KiB
JavaScript
Raw Permalink 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 guardLengths = guards.map(g=>{
var total = 0;
for(var i = 0; i < g.length; i+=2){
if(g[i+1]<g[i]){
total += 60*12;
}
total += g[i+1] - g[i];
}
return total;
});
console.log(guards);
console.log(guardLengths);
var max = Math.max.apply(null, guardLengths.filter(a=>a));
var bestGuard = guardLengths.indexOf(max);
console.log(bestGuard, guards[bestGuard]);
var mins = [];
var times = guards[bestGuard];
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]++;
}
}
console.log(mins);
var bestMin = mins.indexOf(Math.max.apply(null, mins.filter(a=>a)))
console.log(Math.max.apply(null, mins.filter(a=>a)))
console.log(bestMin);
console.log(bestMin * bestGuard);