orderedGroupsets = {
let chosenGroupset = groupsets[0];
let remainingGroupsets = groupsets.slice(1);
const knownPairs = counter(pairs(chosenGroupset));
const orderedGroupsets = [chosenGroupset];
for (let i = 0, n = remainingGroupsets.length; i < n; ++i) {
const distances = remainingGroupsets.map((groupset) =>
distance(groupset, knownPairs)
);
const minDistance = Math.min(...distances);
const minDistanceIndex = distances.findIndex((d) => d === minDistance);
const chosenGroupset = remainingGroupsets[minDistanceIndex];
remainingGroupsets = remainingGroupsets.filter(
(_, j) => j != minDistanceIndex
);
pairs(chosenGroupset).forEach((pair) => (knownPairs[pair] += 1));
chosenGroupset.repeats = minDistance;
orderedGroupsets.push(chosenGroupset);
}
return orderedGroupsets;
}