Update algorithm

This commit is contained in:
Zachary
2024-11-10 17:37:00 +01:00
parent 5f9485cf2f
commit ab59b428aa
+11 -21
View File
@@ -71,10 +71,6 @@
let daysToUse = daysOff; let daysToUse = daysOff;
for (let month = 0; month < 12; month++) { for (let month = 0; month < 12; month++) {
let currentStreak = [];
let maxStreak = [];
let maxStreakStart = null;
for (let day = 1; day <= 31; day++) { for (let day = 1; day <= 31; day++) {
const date = new Date(year, month, day); const date = new Date(year, month, day);
if (date.getMonth() !== month) break; // Skip invalid dates if (date.getMonth() !== month) break; // Skip invalid dates
@@ -82,24 +78,18 @@
const isWeekend = date.getDay() === 0 || date.getDay() === 6; const isWeekend = date.getDay() === 0 || date.getDay() === 6;
const isHoliday = allDays.some(d => d.getTime() === date.getTime()); const isHoliday = allDays.some(d => d.getTime() === date.getTime());
if (isWeekend || isHoliday) { // Check if the day before or after a weekend/holiday can be used to extend it
currentStreak.push(date); if ((isWeekend || isHoliday) && daysToUse > 0) {
} else { const prevDay = new Date(date);
if (currentStreak.length > maxStreak.length) { prevDay.setDate(date.getDate() - 1);
maxStreak = [...currentStreak]; const nextDay = new Date(date);
maxStreakStart = currentStreak[0]; nextDay.setDate(date.getDate() + 1);
}
currentStreak = [];
}
}
// Use days off to extend the longest streak in the current month if (!allDays.some(d => d.getTime() === prevDay.getTime()) && prevDay.getDay() !== 0 && prevDay.getDay() !== 6) {
if (maxStreakStart && daysToUse > 0) { optimizedDaysOff.push(new Date(prevDay));
let date = new Date(maxStreakStart); daysToUse--;
while (daysToUse > 0 && date.getFullYear() === year) { } else if (!allDays.some(d => d.getTime() === nextDay.getTime()) && nextDay.getDay() !== 0 && nextDay.getDay() !== 6) {
date.setDate(date.getDate() - 1); optimizedDaysOff.push(new Date(nextDay));
if (!allDays.some(d => d.getTime() === date.getTime()) && date.getDay() !== 0 && date.getDay() !== 6) {
optimizedDaysOff.push(new Date(date));
daysToUse--; daysToUse--;
} }
} }