/*
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
*/