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