use rand::Rng; use std::time::Instant; type Ticket = [u8; 5]; const NUM_ENTRIES: usize = 10_000_000; // println!("char: {}", rand::random::()); 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 = 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() ); }