JSFiddle - React, Tailwind, and code Playground
by Shishir Morshed
JavaScript
var participant = 17;
var pizzaAr = [2, 5, 6, 8];
var originalList = [2, 5, 6, 8];
var totalSlice = pizzaAr.reduce(function(acc, val) { return acc + val; }, 0);
//check if totalSlice is more than participant
var resultArr = totalSlice > participant ? recurRemove(pizzaAr): pizzaAr;
var result='';
console.log(originalList, resultArr);
resultArr.forEach(function(item){
result += originalList.indexOf(item) + ' ';
});
alert(resultArr.length + '\n' + result.trim());
function recurRemove(orderdPizza){
let totalOrderd = orderdPizza.reduce(function(acc, val) { return acc + val; }, 0);
let updatedOrder = totalOrderd;
let removedPizza = 0;
// let updateType = false;
for(var j=0; j<orderdPizza.length; j++){
let currentUpdatedOrderd = totalOrderd - orderdPizza[j];
if(currentUpdatedOrderd == participant){
//remove piza and break loop
updatedOrder = totalOrderd - orderdPizza[j];
removedPizza = orderdPizza[j];
break;
}
if(updatedOrder < participant && currentUpdatedOrderd < participant && currentUpdatedOrderd > updatedOrder){
updatedOrder = totalOrderd - orderdPizza[j];
removedPizza = orderdPizza[j];
}else if(updatedOrder > participant && currentUpdatedOrderd < participant){
updatedOrder = totalOrderd - orderdPizza[j];
removedPizza = orderdPizza[j];
}else if( Math.abs(currentUpdatedOrderd - participant) < Math.abs(updatedOrder - participant) ){
updatedOrder = totalOrderd - orderdPizza[j];
removedPizza = orderdPizza[j];
}
}
let removedPizzaIndex = orderdPizza.indexOf(removedPizza);
orderdPizza.splice(removedPizzaIndex, 1);
// console.log(removedPizza);
if(orderdPizza.reduce(function(acc, val) { return acc + val; }, 0) > participant && orderdPizza.length> 1){
recurRemove(orderdPizza);
}
return orderdPizza;
}