import Foundation
struct RangePair {
var start: Int
var end: Int
}
func mergeRanges(_ ranges: [RangePair]) -> [RangePair] {
let sorted = ranges.sorted { $0.start < $1.start }
var merged: [RangePair] = []
for range in sorted {
if let last = merged.last, range.start <= last.end {
merged[merged.count - 1].end = max(last.end, range.end)
} else {
merged.append(range)
}
}
return merged
}
func main() {
let ranges = [
RangePair(start: 302, end: 447),
RangePair(start: 488, end: 489),
RangePair(start: 121, end: 234),
RangePair(start: 200, end: 421),
RangePair(start: 140, end: 354)
]
let merged = mergeRanges(ranges)
print(merged.map { "(\($0.start), \($0.end))" })
}
main()
/*
run:
["(121, 447)", "(488, 489)"]
*/