<html>
<head>
<script language="javascript" type="text/javascript">
/* Declare subsets as global to simplify individual access in larger context */
var subSetOneValues = [], subSetTwoValues = [];
function splitArrayIntoApproxEqualSubsets(sequence) {
/* Sort the sequence passed to this function */
sequence.sort(function(a, b) {return a - b});
/* Find working range to split array into subsets */
var elementsTotalValue = 0, collectiveMinValue = 0, collectiveMaxValue = 0;
for (var i = 0; i < sequence.length; i++) {
elementsTotalValue += sequence[i];
}
/* Round down decimal like 1.5 to nearest whole number like 1 */
collectiveMinValue = Math.floor(elementsTotalValue / 2);
collectiveMaxValue = collectiveMinValue + 1;
/* Step through array (set) */
var subsetOneIndexes = [];
for (var p = 0; p < sequence.length; p++) {
var tmpSubset = [];
var tmpCummulativeValue = 0;
for (var s = p; s < sequence.length; s++) {
if ((tmpCummulativeValue + sequence[s]) <= collectiveMaxValue) {
tmpCummulativeValue += sequence[s];
tmpSubset.push(s);
}
else {
break;
}
}
if (tmpCummulativeValue >= collectiveMinValue && tmpCummulativeValue <= collectiveMaxValue) {
subsetOneIndexes = tmpSubset;
break;
}
else {
if (subsetOneIndexes.length == 0 && p == (sequence.length - 1)) {
subsetOneIndexes.push(p);
}
}
}
/* Split array (set) into two sub-arrays (subsets) */
for (var a = 0; a < sequence.length; a++) {
var subSetIndexFound = false;
for (var b = 0; b < subsetOneIndexes.length; b++) {
if (a == subsetOneIndexes[b]) {
subSetOneValues.push(sequence[a]);
subSetIndexFound = true;
}
}
if (subSetIndexFound == false) {
subSetTwoValues.push(sequence[a]);
}
}
var result = "Subset 1 = {" + subSetOneValues + "}\r\nSubset 2 = {" + subSetTwoValues + "}";
return(result);
}
</script>
</head>
<body onload='javascript:document.getElementById("output").value = splitArrayIntoApproxEqualSubsets([1,6,11,5,9,3,3,4,7]);'>
Given the array sequence "set": [1,6,11,5,9,3,3,4,7] split it into two approximately equal sub-arrays *subsets*; that is, when you add the values in each sub-array together then the value of subset 1 should approximately equal subset 2.<br />
<span style="font-size:9pt">For reference, the two subsets returned should be: [3,4,5,6,7] and [1,3,9,11]</span>
<br /><br />
<strong>Function Logic Output:</strong><br />
<textarea name="output" id="output" rows="4" cols="60"></textarea>
</body>
</html>