print more

This commit is contained in:
Jay Robson 2025-05-04 00:26:48 +10:00
parent ba091c6803
commit f623a7481a
2 changed files with 9 additions and 9 deletions

View File

@ -13,7 +13,7 @@ impl Counter {
let mut ballots = Vec::new(); let mut ballots = Vec::new();
for row in csv { for row in csv {
ballots.push(Ballot::parse(row?, &header)?); ballots.push(Ballot::parse(row?, &header)?.to_candidate_ballot(&header));
} }
Ok(Counter { Ok(Counter {

View File

@ -11,13 +11,13 @@ pub mod party;
mod counter; mod counter;
fn main() { fn main() {
let csv_path = { let (csv_path, winner_count) = {
let args: Vec<String> = env::args().collect(); let args: Vec<String> = env::args().collect();
if args.len() != 2 { if args.len() != 3 {
eprintln!("Usage: {} <filename.csv>", args[0]); eprintln!("Usage: {} <filename.csv> <winners>", args[0]);
return; return;
} }
args[1].clone() (args[1].clone(), args[2].parse::<usize>().unwrap())
}; };
let csv = quick_csv::Csv::from_file(csv_path).unwrap().flexible(true); let csv = quick_csv::Csv::from_file(csv_path).unwrap().flexible(true);
let counter = Counter::new(csv).unwrap(); let counter = Counter::new(csv).unwrap();
@ -42,7 +42,6 @@ fn main() {
eprintln!("Total: {total}"); eprintln!("Total: {total}");
let ty = BallotType::Candidate; let ty = BallotType::Candidate;
let winner_count = 6;
let names = match ty { let names = match ty {
BallotType::Party => counter.header.parties.iter().map(|v| v.name.clone()).collect_vec(), BallotType::Party => counter.header.parties.iter().map(|v| v.name.clone()).collect_vec(),
BallotType::Candidate => counter.header.candidates.iter().map(|v| format!("{}: {}", BallotType::Candidate => counter.header.candidates.iter().map(|v| format!("{}: {}",
@ -65,7 +64,7 @@ fn main() {
println!(); println!();
eprintln!("Running election rounds:"); eprintln!("Running election rounds:");
let mut scores: Vec<f64> = Vec::new(); let mut scores = Vec::new();
for index in 0..(running.len() - winner_count) { for index in 0..(running.len() - winner_count) {
scores = counter.count_all_with_powers_of_2(ty, &running); scores = counter.count_all_with_powers_of_2(ty, &running);
@ -92,8 +91,6 @@ fn main() {
running[id_worst] = false; running[id_worst] = false;
println!(); println!();
eprintln!(" - {index}:"); eprintln!(" - {index}:");
eprintln!(" Best: {} ({score_best})", names[id_best]); eprintln!(" Best: {} ({score_best})", names[id_best]);
eprintln!(" Lost: {} ({score_worst})", names[id_worst]); eprintln!(" Lost: {} ({score_worst})", names[id_worst]);
@ -103,6 +100,9 @@ fn main() {
true => Some((name.as_str(), scores[index])), true => Some((name.as_str(), scores[index])),
false => None, false => None,
}).collect_vec(); }).collect_vec();
let total_votes: f64 = scores.iter().sum();
eprintln!("Winners: {winners:#?}"); eprintln!("Winners: {winners:#?}");
eprintln!("Total Votes: {}% ({total_votes} / {total})", total_votes / f64::from(total) * 100.0);
} }