From f623a7481a072138185613caf1616eaffb0e6725 Mon Sep 17 00:00:00 2001 From: Jay Robson Date: Sun, 4 May 2025 00:26:48 +1000 Subject: [PATCH] print more --- src/counter.rs | 2 +- src/main.rs | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/counter.rs b/src/counter.rs index 72b821b..8311ac5 100644 --- a/src/counter.rs +++ b/src/counter.rs @@ -13,7 +13,7 @@ impl Counter { let mut ballots = Vec::new(); for row in csv { - ballots.push(Ballot::parse(row?, &header)?); + ballots.push(Ballot::parse(row?, &header)?.to_candidate_ballot(&header)); } Ok(Counter { diff --git a/src/main.rs b/src/main.rs index 878a09d..59839f0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,13 +11,13 @@ pub mod party; mod counter; fn main() { - let csv_path = { + let (csv_path, winner_count) = { let args: Vec = env::args().collect(); - if args.len() != 2 { - eprintln!("Usage: {} ", args[0]); + if args.len() != 3 { + eprintln!("Usage: {} ", args[0]); return; } - args[1].clone() + (args[1].clone(), args[2].parse::().unwrap()) }; let csv = quick_csv::Csv::from_file(csv_path).unwrap().flexible(true); let counter = Counter::new(csv).unwrap(); @@ -42,7 +42,6 @@ fn main() { eprintln!("Total: {total}"); let ty = BallotType::Candidate; - let winner_count = 6; let names = match ty { BallotType::Party => counter.header.parties.iter().map(|v| v.name.clone()).collect_vec(), BallotType::Candidate => counter.header.candidates.iter().map(|v| format!("{}: {}", @@ -65,7 +64,7 @@ fn main() { println!(); eprintln!("Running election rounds:"); - let mut scores: Vec = Vec::new(); + let mut scores = Vec::new(); for index in 0..(running.len() - winner_count) { scores = counter.count_all_with_powers_of_2(ty, &running); @@ -92,8 +91,6 @@ fn main() { running[id_worst] = false; println!(); - - eprintln!(" - {index}:"); eprintln!(" Best: {} ({score_best})", names[id_best]); eprintln!(" Lost: {} ({score_worst})", names[id_worst]); @@ -103,6 +100,9 @@ fn main() { true => Some((name.as_str(), scores[index])), false => None, }).collect_vec(); + let total_votes: f64 = scores.iter().sum(); + eprintln!("Winners: {winners:#?}"); + eprintln!("Total Votes: {}% ({total_votes} / {total})", total_votes / f64::from(total) * 100.0); }