Update algorithm
This commit is contained in:
+11
-21
@@ -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--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user