more days
This commit is contained in:
17
04/input-test.txt
Normal file
17
04/input-test.txt
Normal file
@ -0,0 +1,17 @@
|
||||
[1518-11-01 00:00] Guard #10 begins shift
|
||||
[1518-11-01 00:05] falls asleep
|
||||
[1518-11-01 00:25] wakes up
|
||||
[1518-11-01 00:30] falls asleep
|
||||
[1518-11-01 00:55] wakes up
|
||||
[1518-11-01 23:58] Guard #99 begins shift
|
||||
[1518-11-02 00:40] falls asleep
|
||||
[1518-11-02 00:50] wakes up
|
||||
[1518-11-03 00:05] Guard #10 begins shift
|
||||
[1518-11-03 00:24] falls asleep
|
||||
[1518-11-03 00:29] wakes up
|
||||
[1518-11-04 00:02] Guard #99 begins shift
|
||||
[1518-11-04 00:36] falls asleep
|
||||
[1518-11-04 00:46] wakes up
|
||||
[1518-11-05 00:03] Guard #99 begins shift
|
||||
[1518-11-05 00:45] falls asleep
|
||||
[1518-11-05 00:55] wakes up
|
1017
04/input.txt
Normal file
1017
04/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
59
04/part1.js
Normal file
59
04/part1.js
Normal file
@ -0,0 +1,59 @@
|
||||
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);
|
46
04/part2.js
Normal file
46
04/part2.js
Normal file
@ -0,0 +1,46 @@
|
||||
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);
|
Reference in New Issue
Block a user