use rand::Rng; // Required for the random_range trait method
use std::collections::HashSet;
fn generate_non_overlapping_random_ranges(begin: i32, end: i32, num_ranges: usize) -> Vec<(i32, i32)> {
let count = num_ranges * 2;
let mut rng = rand::rng();
let mut points_set = HashSet::new();
while points_set.len() < count {
let r = rng.random_range(begin..end);
points_set.insert(r);
}
let mut points: Vec<i32> = points_set.into_iter().collect();
points.sort();
let mut ranges = Vec::new();
for i in (0..points.len()).step_by(2) {
ranges.push((points[i], points[i + 1]));
}
ranges
}
fn main() {
let start = 1;
let end = 500;
let num_ranges = 8;
let ranges = generate_non_overlapping_random_ranges(start, end, num_ranges);
for (s, e) in ranges {
println!("({}, {})", s, e);
}
}
/*
run:
(19, 47)
(93, 127)
(161, 164)
(200, 243)
(276, 278)
(350, 385)
(407, 408)
(418, 426)
*/