SplitNParts

https://stackoverflow.com/a/45653060/2089675

by tanvir_alam_shawn

JavaScript

function splitNParts(num, parts) {
	var total = 0;
	parts.forEach(function(el){
  	total += el.value
  });
  if (total === 0) {
    for (let i = 0; i <= num; i++) {
      parts[i%parts.length].value++;
    }
    return parts
  } else {
  	if (total < 100) {
    	var howMuchLess = 100 - total;
      for (let i = 0; i <= howMuchLess - 1; i++) {
      	if (!parts[i%parts.length].pointer) {
        	parts[i%parts.length].value++;
        	parts[i%parts.length].pointer = true;
        }
      }
    }
    
    if (total > 100) {
    	var howMuchLess = total - 100;
      for (let i = 0; i <= howMuchLess - 1; i++) {
      	if (!parts[i%parts.length].pointer) {
        	parts[i%parts.length].value++;
        	parts[i%parts.length].pointer = true;
        }
      }
    }
    
    console.log(total)
		return parts
	}
}
var parts = [
{name:"A", value:18, pointer:true},
{name:"B", value:17, pointer:false},
{name:"C", value:20, pointer:false},
{name:"D", value:16, pointer:false},
{name:"E", value:16, pointer:false},
{name:"F", value:16, pointer:false}
];

console.log(splitNParts(100, parts));