# HG changeset patch # User Peter Gervai # Date 1675199786 -3600 # Node ID 3d9dba5b16e0f6cb7e526979f9a4d1820df4cee6 # Parent 950660fddec0e6a2358f5969f81200d899444866 v1.00 - single file diff -r 950660fddec0 -r 3d9dba5b16e0 src/main.rs --- a/src/main.rs Tue Jan 31 00:15:54 2023 +0100 +++ b/src/main.rs Tue Jan 31 22:16:26 2023 +0100 @@ -3,7 +3,7 @@ // use core::{fmt, panic}; -use std::{collections::VecDeque, time::Instant, i64::MAX}; +use std::{collections::VecDeque, time::Instant, cmp::Reverse}; use rand::Rng; use std::mem; @@ -152,7 +152,7 @@ self.content.len() } - fn get_nth( &mut self, n: usize ) -> Card { + fn _get_nth( &mut self, n: usize ) -> Card { if let Some(c) = self.content.remove(n) { c } else { @@ -214,7 +214,7 @@ } // ask the player their score - fn tell_points( self ) -> i32 { + fn _tell_points( self ) -> i32 { self.game_point } @@ -266,7 +266,7 @@ trace!("Player {} picking a row for small card, card {:?}, rows {:?}", self.name, playercard, rows); // contains the summary point for each row - let mut row_points = Vec::new(); + let mut row_points = Vec::with_capacity(5); // the smallest row score let mut smallest = 999; // how many rows have the same smallest score @@ -315,7 +315,7 @@ fn new() -> Self { Row { - cards: VecDeque::new(), + cards: VecDeque::with_capacity(5), } } @@ -366,7 +366,7 @@ } impl PlayerCard { - fn get_player(&self) -> i32 { + fn _get_player(&self) -> i32 { self.player_id } } @@ -395,11 +395,11 @@ impl Table { fn new(row_cards: VecDeque) -> Self { - let mut rows = Vec::new(); + let mut rows = Vec::with_capacity(5); for card in row_cards { // create a new row then put a card into it let mut row = Row::new(); - if let Some(c) = row.push_or_collect(card) { + if let Some(_c) = row.push_or_collect(card) { panic!("Freshly created row overflowed"); } rows.push( row ); @@ -501,7 +501,7 @@ // dealing debug!("Dealing."); - for i in 1..=10 { + for _i in 1..=10 { for player in 0 .. player_count { players[player].get_card( deck.pop().expect("Deck is empty while dealing to players") ); } @@ -510,9 +510,9 @@ // we need 5 crds from deck debug!("Building the rows."); let mut cards = VecDeque::new(); - for i in 1..=5 { + (1..=5).for_each(|_| { cards.push_back( deck.pop().expect("deck empty before starting the game") ); - } + }); // println!("We push 5 cards to rows: {:?}\n", cards); let mut table = Table::new(cards); @@ -574,7 +574,7 @@ players[ player_id ].give_pile( cards ); // put new card in the row let overflow = table.put_card_into_row(smallest, rowid); - if let Some(c) = overflow { + if let Some(_) = overflow { panic!("Player took whole row and it's already full"); } } @@ -635,14 +635,22 @@ */ } - println!("Totals (game time {} µs, or {} s), {} games played ({} shuffles):", + let elapsed_micro: f64 = stats.start_time.elapsed().as_micros() as f64; + let game_rounds: f64 = GAME_ROUNDS.into(); + + let _res: f64 = stats.start_time.elapsed().as_micros() as f64 / >::into(GAME_ROUNDS); + + println!("Totals (game time {} µs, or {} s; {} µs/game), {} games played ({} shuffles):", stats.start_time.elapsed().as_micros(), stats.start_time.elapsed().as_secs(), + elapsed_micro / game_rounds, stats.game_count, stats.shuffle_count, ); - players.sort_by( |a, b| a.total_point.partial_cmp(&b.total_point).unwrap() ); + // players.sort_by( |a, b| a.total_point.partial_cmp(&b.total_point).unwrap() ); // ASC points + // players.sort_by( |a, b| b.wins.partial_cmp(&a.wins).unwrap() ); // DESC wins + players.sort_by_cached_key( |x| Reverse(x.wins) ); // DESC wins (caching is just for the show) for i in 0..players.len() { let p = &players[i]; @@ -652,7 +660,7 @@ #[cfg(test)] mod tests { - use core::panic; + // use core::panic; use std::collections::VecDeque; use rand::Rng; @@ -736,7 +744,7 @@ fn sort_cards() { let mut cards: VecDeque = VecDeque::new(); let mut rng = rand::thread_rng(); - for i in 1..50 { + for _ in 1..50 { let n = rng.gen_range(1..104); cards.push_back( Card::new(n) ); }