Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Buy a domain name - Register cheap domain names from $0.99 - Namecheap

Scalable Hosting That Grows With You

Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Semrush - keyword research tool

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

40,003 questions

51,950 answers

573 users

How to generate non‑overlapping random ranges (start,end),(start,end) in Rust

1 Answer

0 votes
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)

*/

 



answered Jan 28 by avibootz

Related questions

...