diff --git a/Cargo.lock b/Cargo.lock index 0a7180b..4a77ceb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,11 +2,18 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + [[package]] name = "ballot-counter" version = "0.1.0" dependencies = [ "itertools", + "num", "quick-csv", ] @@ -25,6 +32,79 @@ dependencies = [ "either", ] +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + [[package]] name = "quick-csv" version = "0.1.6" diff --git a/Cargo.toml b/Cargo.toml index 1b6162a..0d5070b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,4 +5,5 @@ edition = "2024" [dependencies] itertools = "0.14.0" +num = "0.4.3" quick-csv = "0.1.6" diff --git a/src/ballot.rs b/src/ballot.rs index dd20eda..7e15082 100644 --- a/src/ballot.rs +++ b/src/ballot.rs @@ -71,10 +71,7 @@ impl Ballot { let mut votes = Vec::::new(); for party_id in self.votes { - let start = votes.len(); votes.extend(header.parties[party_id].member_ids.iter().copied()); - let votes_end = &mut votes[start..]; - votes_end.rotate_left(self.paper_id % votes_end.len()); } Ballot { diff --git a/src/counter.rs b/src/counter.rs index a9c6cf5..458f5ff 100644 --- a/src/counter.rs +++ b/src/counter.rs @@ -22,8 +22,8 @@ impl Counter { }) } - pub fn count_primaries(&self, ty: BallotType, running: &[bool]) -> Vec { - let mut scores = vec![0; running.len()]; + pub fn count_primaries(&self, ty: BallotType, running: &[bool]) -> Vec where T: num::Num + Copy + std::ops::AddAssign { + let mut scores = vec![T::zero(); running.len()]; for ballot in self.ballots.iter() { if ballot.ty != ty { @@ -33,7 +33,7 @@ impl Counter { if !running[id] { continue; } - scores[id] += 1; + scores[id] += T::one(); break; } }