aoc/2018/04/part2.js

47 lines
1 KiB
JavaScript
Raw Permalink Normal View History

2018-12-04 22:11:25 +00:00
const fs = require('fs');
let input = fs.readFileSync('input.txt', 'utf-8').split('\n').sort((a, b) => val(a).getTime() - val(b).getTime());
function val(a) {
let time = new Date(a.match(/\[(.*)\]/)[1]);
return time;
}
let guards = {};
let id;
let start;
let shifts = []
for (let line of input) {
let match = line.match(/#(\d+)/);
if (match) {
id = match[1];
if (!guards[id])
guards[id] = {};
shifts.push(id);
} else {
if (line.includes('falls')) {
start = val(line).getMinutes();
} else if (line.includes('wakes')) {
let end = val(line).getMinutes();
for (time = start; time < end; time++) {
guards[id][time] = (guards[id][time] || 0) + 1;
}
}
}
}
let theid;
let themost = 0;
let theminute;
for (id in guards) {
let thismost = Object.entries(guards[id]).sort((a, b) => b[1] - a[1])[0];
if (!thismost) { continue }
if (thismost[1] > themost) {
theid = id;
themost = thismost[1];
theminute = Number(thismost[0])
}
}
console.log(`#${theid} * minute ${theminute} = ${theid * theminute}, ${themost} times`)