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