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.

39,845 questions

51,766 answers

573 users

How to generate a random integer from a range [0, N] that is not in a unique integer list with Rust

1 Answer

0 votes
use rand::{Rng, SeedableRng};
use rand::rngs::StdRng;
use std::collections::HashSet;
use std::time::{SystemTime, UNIX_EPOCH};

fn random_excluding(n: i32, excluded: &[i32]) -> i32 {
    if excluded.len() > (n + 1) as usize {
        return -1;
    }

    // Get the current time in nanoseconds
    let seed = SystemTime::now()
        .duration_since(UNIX_EPOCH)
        .expect("Time went backwards")
        .as_nanos() as u64;

    // Create a seeded RNG
    let mut rng = StdRng::seed_from_u64(seed);

    // Convert excluded slice into a HashSet for fast lookup
    let excluded_set: HashSet<i32> = excluded.iter().cloned().collect();

    loop {
        // Generate a random number in [0, n]
        let num = rng.random_range(0..=n);
        if !excluded_set.contains(&num) {
            return num;
        }
    }
}

fn main() {
    let excluded = vec![2, 5, 7];
    let n = 14;

    let result = random_excluding(n, &excluded);
    println!("{}", result);
}



/*
run:

9

*/



answered Nov 19, 2025 by avibootz

Related questions

...