60 lines
1.5 KiB
JavaScript
60 lines
1.5 KiB
JavaScript
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);
|