print more
This commit is contained in:
parent
ba091c6803
commit
f623a7481a
|
|
@ -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 {
|
||||||
|
|
|
||||||
16
src/main.rs
16
src/main.rs
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue