1
var assignTasks = function (servers, tasks) {
2
const idleQueue = new PriorityQueue({
3
compare: (a, b) => a.weight - b.weight || a.index - b.index,
4
});
5
const processQueue = new MinPriorityQueue({
6
priority: ({ completeSeconds }) => completeSeconds,
7
});
8
let currentSeconds = 0;
9

10
servers.forEach((weight, index) => idleQueue.enqueue({ weight, index }));
11

12
return tasks.map((seconds, index) => {
13
if (idleQueue.isEmpty())
14
currentSeconds = processQueue.front().element.completeSeconds;
15
if (currentSeconds < index) currentSeconds = index;
16
while (
17
!processQueue.isEmpty() &&
18
processQueue.front().element.completeSeconds <= currentSeconds
19
) {
20
const processed = processQueue.dequeue().element;
21

22
idleQueue.enqueue(processed);
23
}
24
const idle = idleQueue.dequeue();
25
const completeSeconds = currentSeconds + seconds;
26

27
processQueue.enqueue({ ...idle, completeSeconds });
28
return idle.index;
29
}, []);
30
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0