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))