print more
This commit is contained in:
parent
ba091c6803
commit
f623a7481a
|
|
@ -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 {
|
||||
|
|
|
|||
16
src/main.rs
16
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<String> = env::args().collect();
|
||||
if args.len() != 2 {
|
||||
eprintln!("Usage: {} <filename.csv>", args[0]);
|
||||
if args.len() != 3 {
|
||||
eprintln!("Usage: {} <filename.csv> <winners>", args[0]);
|
||||
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 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<f64> = 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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue