I need help with the ability to divide an unknown integer into a given number of even parts — or at least as even as they can be. The sum of the parts should be the original
You may get maximum integer coefficient as x/y
rounded down to integer and remainder with x%y
. Than simply break remainder into 1's and add those 1's to corresponding number of items:
const breakIntoParts = (num, parts) =>
[...Array(parts)].map((_,i) =>
0|(i < num%parts ? num/parts+1 : num/parts))
console.log(JSON.stringify(breakIntoParts(20, 6)));
.as-console-wrapper {min-height: 100%}
Extremely simple solution:
const splitInteger = (number, parts) => {
const remainder = number % parts
const baseValue = (number - remainder) / parts
return Array(parts).fill(baseValue).fill(baseValue + 1, parts - remainder)
}
To order from largest to smallest:
const splitInteger = (number, parts) => {
const remainder = number % parts
const baseValue = (number - remainder) / parts
return Array(parts).fill(baseValue).fill(baseValue + 1, 0, remainder)
}
Now as an npm module: split-integer
Try like this.
var splitInteger = function(num, parts) {
// Complete this function
var val;
var mod = num % parts;
if(mod == 0){
val = num/parts;
retData = Array(parts).fill(val);
} else {
val = (num-mod)/parts;
retData = Array(parts).fill(val);
for(i=0;i<mod;i++){
retData[i] = retData[i] + 1;
}
retData.reverse()
}
return retData;
}
var d = splitInteger(20, 6)
console.log(d);
console.log("sum - " + d.reduce(function(a,b){return a+b}));