normalizeRanges function
Normalizes ranges by sorting and merging them.
Returns a new array with the merged values sorted in ascending range order.
Implementation
List<(int, int)> normalizeRanges(List<(int, int)> ranges) {
if (ranges.isEmpty) {
return ranges.toList();
}
for (var i = 0; i < ranges.length; i++) {
final range = ranges[i];
final start = range.$1;
final end = range.$2;
if (start > end) {
throw ArgumentError('Invalid range at index $i: ($start, $end)');
}
}
ranges = sortRanges(ranges);
final result = <(int, int)>[];
final first = ranges.first;
result.add(ranges.first);
var prevStart = first.$1;
var prevEnd = first.$2;
for (var i = 1; i < ranges.length; i++) {
final curr = ranges[i];
final start = curr.$1;
final end = curr.$2;
if (start <= prevEnd + 1) {
prevEnd = prevEnd > end ? prevEnd : end;
result[result.length - 1] = (prevStart, prevEnd);
} else {
prevStart = start;
prevEnd = end;
result.add((start, end));
}
}
return result;
}