JSFiddle - React, Tailwind, and code Playground
by ti2005
JavaScript
function minimumTimeRequired(workerCount, items, timeTakenByWorker) {
if (workerCount > 1000) { return 'Worker limit exceeded!'; }
if (items > 10000) { return 'Item limit exceeded!'; }
const c = {};
let fastest = timeTakenByWorker[0];
for (let i = 0; i < workerCount; i++) {
c[timeTakenByWorker[i]] = 1;
if (timeTakenByWorker[i] < fastest) {
fastest = timeTakenByWorker[i];
}
}
let min_days = 1
let max_days = Math.ceil((fastest * items) / c[fastest]);
console.log("MaxVal: ", max_days);
while ((max_days - min_days) > 1) {
mid = Math.floor((min_days + max_days) / 2);
console.log("Mid: ", mid);
let output = 0;
console.log("+++++++++++++++++++++++++++");
for (let i = 0, len = Object.keys(c).length; i < len; i++) {
let key = Object.keys(c)[i];
output += Math.floor(mid / key) * c[key];
console.log("output: ", output);
}
console.log("+++++++++++++++++++++++++++");
console.log("Summated output: ", output);
if (output < items) {
min_days = mid;
} else {
max_days = mid;
}
}
return max_days;
}
const [N, M] = [4, 17]
timeRequired = [7, 11, 13, 9]
console.log(minimumTimeRequired(N, M, timeRequired))