function optimalProp(input, output, split) {
  var len = input.length;
  var head = input.slice(0, split % len);
  var tail = input.slice(split % len);
  var shuffled = tail.concat(head);
  var greedyResult = greedy(shuffled);

  return output.length <= greedyResult.length;
}
## Last property

  The very last property is a bit tricky:

  > For every other possible combination of input elements such that (1) is true, the number of sets included is never fewer than the number of sets output by my function.

  We can't really test it exhaustively, yet we do random testing!
  We will use the fact that for some permutation of the input list, even the greedy algorithm will return an optimal solution.
  So we rephrase the property into

  > For every permutation of input set, the numer of sets included in greedy algorithm solution is never fewer than the number of sets output by my function.

  Also generating random permutation is not trivial. But as input is random anyway. we cut corner: we'll split input list at random point and swap the parts.