static L splitIntoRandomRanges(double approximateNumberOfRanges, IntRange base) { int i = base.start; new L out; double avgLength = doubleRatio(l(base), approximateNumberOfRanges); int safety = 0; while (i < base.end && safety++ < l(base)) { int j = i+max(1, iround(random(avgLength*2))); out.add(intRange(i, j)); j = i; } ret out; }