lotto/src/main.rs

72 lines
1.6 KiB
Rust
Raw Normal View History

2024-05-03 13:06:15 -05:00
use rand::Rng;
use std::time::Instant;
type Ticket = [u8; 5];
const NUM_ENTRIES: usize = 10_000_000;
// println!("char: {}", rand::random::<char>());
fn gen_num() -> u8 {
rand::thread_rng().gen_range(0..90)
}
fn gen_ticket() -> Ticket {
let num1 = gen_num();
let mut num2: u8 = gen_num();
while num2 == num1 {
num2 = gen_num()
}
let mut num3: u8 = gen_num();
while num3 == num1 || num3 == num2 {
num3 = gen_num()
}
let mut num4: u8 = gen_num();
while num4 == num1 || num4 == num2 || num4 == num3 {
num4 = gen_num()
}
let mut num5: u8 = gen_num();
while num5 == num1 || num5 == num2 || num5 == num3 || num5 == num4 {
num5 = gen_num()
}
[num1, num2, num3, num4, num5]
}
fn num_matches(t1: Ticket, t2: Ticket) -> usize {
let mut result = 0;
for n1 in t1 {
for n2 in t2 {
if n1 == n2 {
result += 1;
}
}
}
result
}
fn main() {
println!("Generating entries");
let mut entries: Vec<Ticket> = Vec::with_capacity(NUM_ENTRIES);
for _ in 0..NUM_ENTRIES {
entries.push(gen_ticket());
}
let winning = gen_ticket();
let start = Instant::now();
println!("Counting winners...");
let mut winners: [usize; 6] = [0, 0, 0, 0, 0, 0];
for n in entries {
let num_winning = num_matches(n, winning);
winners[num_winning] += 1
}
let duration = start.elapsed();
println!(
"Winners: {:?}\nTime Elapsed: {}ms",
winners,
duration.subsec_millis()
);
}