mirror of
https://github.com/multipleof4/lynchmark.git
synced 2026-04-07 04:42:13 +00:00
Docs: Update benchmark for minimax/minimax-m2.7
This commit is contained in:
52
tests/7_scheduler/outputs/minimax_minimax-m2.7.js
Normal file
52
tests/7_scheduler/outputs/minimax_minimax-m2.7.js
Normal file
@@ -0,0 +1,52 @@
|
||||
async function findAvailableSlots(calendar1, calendar2, constraints) {
|
||||
const { durationMinutes, searchRange: { start: rangeStart, end: rangeEnd }, workHours: { start: whStart, end: whEnd } } = constraints;
|
||||
const [sh, sm] = whStart.split(':').map(Number);
|
||||
const [eh, em] = whEnd.split(':').map(Number);
|
||||
const workStartMin = sh * 60 + sm;
|
||||
const workEndMin = eh * 60 + em;
|
||||
const { parseISO, addMinutes, startOfDay, eachDayOfInterval, mergeOverlappingIntervals, min, max } = await import('https://cdn.jsdelivr.net/npm/date-fns@2.30.0/esm/index.js');
|
||||
|
||||
const rangeStartDate = parseISO(rangeStart);
|
||||
const rangeEndDate = parseISO(rangeEnd);
|
||||
|
||||
const allBusy = [...calendar1, ...calendar2]
|
||||
.map(({ start, end }) => ({ start: parseISO(start), end: parseISO(end) }))
|
||||
.filter(({ start, end }) => start < end);
|
||||
|
||||
const mergedBusy = mergeOverlappingIntervals(allBusy);
|
||||
|
||||
const busyInRange = mergedBusy
|
||||
.map(b => ({ start: max(b.start, rangeStartDate), end: min(b.end, rangeEndDate) }))
|
||||
.filter(b => b.start < b.end);
|
||||
|
||||
const freeWindows = [];
|
||||
let cur = rangeStartDate;
|
||||
for (const busy of busyInRange) {
|
||||
if (cur < busy.start) freeWindows.push({ start: cur, end: busy.start });
|
||||
cur = max(cur, busy.end);
|
||||
}
|
||||
if (cur < rangeEndDate) freeWindows.push({ start: cur, end: rangeEndDate });
|
||||
|
||||
const slots = [];
|
||||
for (const win of freeWindows) {
|
||||
const days = eachDayOfInterval({ start: win.start, end: win.end });
|
||||
for (const day of days) {
|
||||
const dayStart = startOfDay(day);
|
||||
const dailyStart = addMinutes(dayStart, workStartMin);
|
||||
const dailyEnd = addMinutes(dayStart, workEndMin);
|
||||
const intersectStart = max(win.start, dailyStart);
|
||||
const intersectEnd = min(win.end, dailyEnd);
|
||||
if (intersectStart >= intersectEnd) continue;
|
||||
let slotStart = intersectStart;
|
||||
while (addMinutes(slotStart, durationMinutes) <= intersectEnd) {
|
||||
const slotEnd = addMinutes(slotStart, durationMinutes);
|
||||
slots.push({ start: slotStart.toISOString(), end: slotEnd.toISOString() });
|
||||
slotStart = slotEnd;
|
||||
}
|
||||
}
|
||||
}
|
||||
return slots;
|
||||
}
|
||||
export default findAvailableSlots;
|
||||
// Generation time: 159.679s
|
||||
// Result: FAIL
|
||||
Reference in New Issue
Block a user