generated from mariotacke/template-advent-of-code
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpart2.js
27 lines (21 loc) · 801 Bytes
/
part2.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
module.exports = (input, maxDays = 256) => {
const numberOfDays = maxDays + 8 + 1;
const days = Array.from({ length: numberOfDays }).fill(0);
const startingFish = input.split(',').map((timer) => +timer);
const relativeSpawnDays = Array
.from({ length: Math.ceil(numberOfDays / 7) })
.map((_, i) => i * 7);
startingFish.forEach((remainingTimer) => {
days[remainingTimer] += 1;
});
for (let currentDay = 0; currentDay <= numberOfDays; currentDay++) {
const existingFish = days[currentDay];
relativeSpawnDays.forEach((relativeSpawnDay) => {
const spawnsOnDay = currentDay + relativeSpawnDay + 8 + 1;
if (spawnsOnDay < numberOfDays) {
days[spawnsOnDay] += existingFish;
}
});
}
return days.reduce((sum, fish) => sum + fish, 0);
};