How to generate random lottery numbers for 6 numbers out of 37 and 1 power number out of 7 in Rust

1 Answer

0 votes
/*
    This program generates random lottery numbers for:
        - 6 distinct numbers out of 37
        - 1 distinct number out of 7 (power number)

    Requirements:
        - Use only: use rand::rng;
        - Use only: let mut rng = rng(); // thread‑local RNG (rand 0.9+)

    Algorithm:
        - Build a Vec of 1..37
        - Shuffle it manually using Fisher–Yates
        - Take the first 6 numbers (distinct by construction)
        - Generate 1 power number using rand::random_range()
*/

use rand::rng; // thread‑local RNG (rand 0.9+)

// Fisher–Yates shuffle implemented manually
fn pick_distinct_numbers(count: usize, max: usize) -> Vec<usize> {
    let mut numbers: Vec<usize> = (1..=max).collect();
    let _rng = rng(); // required thread-local RNG binding

    // Manual Fisher–Yates shuffle
    for i in (1..numbers.len()).rev() {
        let j = rand::random_range(0..=i);
        numbers.swap(i, j);
    }

    numbers.truncate(count);
    numbers
}

// Single power number
fn pick_power_number(max: usize) -> usize {
    let _rng = rng();
    rand::random_range(1..=max)
}

fn main() {
    let main_count = 6;
    let main_max = 37;
    let power_max = 7;

    // Generate main numbers (distinct)
    let mut main_numbers = pick_distinct_numbers(main_count, main_max);
    main_numbers.sort(); // nicer output

    // Generate power number
    let power_number = pick_power_number(power_max);

    // Output results
    println!("Main numbers (6 out of 37): {:?}", main_numbers);
    println!("Power number (1 out of 7): {}", power_number);
}



/*
run:

Main numbers (6 out of 37): [17, 18, 29, 33, 34, 36]
Power number (1 out of 7): 2

*/

 



answered Jul 28 by avibootz

Related questions

...