JSFiddle - React, Tailwind, and code Playground

HTML

<pre><code id="output"></code></pre>

JavaScript

// Just for displaying output
var log = (function() {
    var o = document.getElementById("output");
    return function() {o.innerHTML += "\n" + [].join.call(arguments, ", ");}
}());

// Main function
var equalSplit = (function() {
    var sum = function(list) {return list.reduce(function(a, b) {
        return a + b;
    }, 0);};
    var square = function(x) {return x * x;};
    var variance = function(groups) {
        var sizes = groups.map(sum),
            mean = sum(sizes) / sizes.length;
        return sum(sizes.map(function(size) {return square(size - mean);}, sizes));
    };
    var firstGroupChoices = function(group, count) {
        if (group.length < 2 || count < 2) {return group;}
        var mean = sum(group) / count;
        var current = 0, next = group[0], idx = 0;
        do {
            current = next;
            next = next + group[++idx];
        } while (next < mean);
        if (next === mean) {
            return [group.slice(0, idx + 1)]
        } else {
            return [
                group.slice(0, idx),
                group.slice(0, idx + 1)
            ];
        }
    };
    var val = function(group, count, soFar) {
        if (count <= 0 || group.length == 0) {
            return {groups: soFar, variance: variance(soFar)};
        }
        if (count == 1) {
            return val([], 0, soFar.concat([group]));
        }
        var choices = firstGroupChoices(group, count);
        var values = choices.map(function(choice){
            return val(group.slice(choice.length), count - 1, soFar.concat([choice]));
        });
        return values.sort(function(a, b) {return a.variance - b.variance;})[0];
    };
    return function(group, count) {
        return val(group, count, []).groups;
    }
}());

// Repeated here to use in the test function
var sum = function(list) {return list.reduce(function(a, b) {
    return a + b;
}, 0);};
var square = function(x) {return x * x;};
var variance = function(groups) {
    var sizes =...