function combinations(arr, len) { let tempArry = [] let final = [] for (let i = 0; i < arr.length; i++) { //console.log("i ", i) if ((arr.length - i) == (len - 1)) { break } tempArry.push(arr[i]) for (let j = i + 1; j < arr.length; j++) { //console.log("j ", j) tempArry.push(arr[j]) //console.log("tempArry ", tempArry) if (tempArry.length == len) { //console.log("tempArry inside if ", tempArry) final.push([...tempArry]) //console.log("final inside if ", final) tempArry.pop() } } tempArry = [] } //console.log("final ", final) return final } function getPermutations(arr, outputLength) { const results = []; function permute(currentArr, remaining) { if (currentArr.length === outputLength) { results.push([...currentArr]); // Copy current arrangement to avoid mutation return; } for (let i = 0; i < remaining.length; i++) { const nextElement = remaining[i]; const remainingCopy = [...remaining]; // Copy to avoid mutation remainingCopy.splice(i, 1); permute([...currentArr, nextElement], remainingCopy); } } permute([], arr); return results; } function processor(ind, finalQuality, mapWages, combOfWage) { let currentQua1 = finalQuality[ind] let currentWage1 = combOfWage[ind] //let currentWage1 = mapWages.get(finalQuality[ind]) let after = Number(ind) + 1 let afterQua = finalQuality[after] let afterWage1 = combOfWage[after] //let afterWage1 = mapWages.get(finalQuality[after]) let g = afterQua / currentQua1 combOfWage[after] = (g * currentWage1) //mapWages.set(afterQua, (g * currentWage1)) } var mincostToHireWorkers = function (quality, wage, k) { let accumulate = 0 let mapWages = new Map() for (const f in quality) { mapWages.set(quality[f], wage[f]) } let resAccu = [] console.log(mapWages) // let comb = combinations(quality, k) // console.log("comb ", comb) // let combOfWages = combinations(wage, k) // console.log("combOfWages ", combOfWages) let comb = getPermutations(quality, k) console.log("comb ", comb) let combOfWages = getPermutations(wage, k) console.log("combOfWages ", combOfWages) for (const g in comb) { let SortedQuality = comb[g] let combOfWage = combOfWages[g] console.log("SortedQuality is ", SortedQuality) let finalQuality = SortedQuality console.log("finalQuality is ", finalQuality) for (let i = finalQuality.length - 1; i >= 0; i--) { let prev = Number(i) - 1 console.log("prev ", prev) let currentQua = finalQuality[i] console.log("currentQua ", currentQua) let currentWage = combOfWages[g][i] //let currentWage = mapWages.get(finalQuality[i]) console.log("currentWage ", currentWage) if (i > 0) { let prevQua = finalQuality[prev] console.log("prevQua ", prevQua) let prevWage = combOfWages[g][prev] //let prevWage = mapWages.get(finalQuality[prev]) console.log("prevWage ", prevWage) let ntha = currentQua / prevQua console.log("ntha ", ntha) let x = (currentWage * prevQua) / currentQua console.log("x ", x) if (x < prevWage) { combOfWages[g][i] = (ntha * prevWage) console.log("combOfWages[g][i] is ", combOfWages[g][i]) //mapWages.set(currentQua, (ntha * prevWage)) for (let k = i; k < finalQuality.length; k++) { processor(k, finalQuality, mapWages,combOfWage ) } } else if (x > prevWage) { accumulate = accumulate + currentWage combOfWages[g][prev] = x //mapWages.set(prevQua, x) } else if (x == prevWage) { accumulate = accumulate + currentWage } } else { accumulate = accumulate + currentWage } console.log("accumulate ", accumulate) } accumulate = 0 for (const l in finalQuality) { accumulate = accumulate + combOfWages[g][l] console.log("last finalQuality", finalQuality) console.log("last accumulate", accumulate) //accumulate = accumulate + mapWages.get(l) } resAccu.push(accumulate) console.log("resAccu is ", resAccu) } let finalResAccu = resAccu.sort((a, b) => a - b) return finalAcc = finalResAccu[0] };
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter