Greedy Cake Thief

Run Settings
LanguageJavaScript
Language Version
Run Command
var lines = []; function parseInput(){ var inputs = lines .map(item=>item.split(";")); inputs.forEach(item=>execute(item)); } function readInput(){ var buffer = process.stdin.read(); if( buffer ){ lines.push(buffer.toString()); } } process.stdin.on("readable", readInput); process.stdin.on("end", parseInput); function execute( input ){ var tuples = JSON.parse(input[0]); var capacity = parseInt(input[1]); console.log( optimize(tuples, capacity) ); } function optimize( tuples, capacity ){ var result = 0; console.log( "Tuples : ", tuples, " Capacity : ", capacity ); if( tuples.length > 1 && capacity > 0 ){ var weightedTuples = tuples .filter(item=>item[0]<=capacity) // Ignore cakes with higher weight than capacity .filter(item=>item[0]>0) // Ignore cakes with zero weight .filter(item=>item[1]>0) // Ignore cakes with zero value .map(item=>item.concat(Math.floor(capacity/item[0]))) // Determine the maximum number of cakes for each tuple can fit in duffel .map(item=>item.concat(capacity-(item[2]*item[0]))) // Determine the remaining capacity after the maximum number of cakes for each tuple .map(item=>item.concat(item[2]*item[1])) // Determine the value of the maximum number of cakes .sort((item1,item2)=>item2[4]-item1[4]); // Sort based on the maximum value var maxTuple = weightedTuples.shift(0,1); //Remove the Most lucrative tuple console.log(maxTuple); result = parseInt(maxTuple[4]) + optimize( weightedTuples.map(item=>[].concat(item[0]).concat(item[1])), maxTuple[3] ); //Optimize the remaining tuples with the remainder as capacity } return result; }
Editor Settings
Theme
Key bindings
Full width
Lines