From f8226fa5a24580702ee24bc9bc62cc96808c6561 Mon Sep 17 00:00:00 2001 From: "Peter J. Holzer" Date: Fri, 12 May 2023 21:18:00 +0200 Subject: [PATCH] Implememen backwards runoff --- utils/instantrunoff | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/utils/instantrunoff b/utils/instantrunoff index a663c76..776539a 100755 --- a/utils/instantrunoff +++ b/utils/instantrunoff @@ -43,12 +43,14 @@ def dump_ballots(ballots): for r in ballot: print(r) -def runoff(ballots): +def runoff_forward(ballots): count = {} candidates = {} for ballot in ballots: for r in ballot: - count[r.id] = [0] * len(ballot) + if r.id not in count or len(count[r.id]) < len(ballot): + log.debug("count[%d] <- %d elements", r.id, len(ballot)) + count[r.id] = [0] * len(ballot) candidates[r.id] = r for ballot in ballots: for pos, r in enumerate(ballot): @@ -66,6 +68,21 @@ def runoff(ballots): ] return loser, new_ballots +der runoff_backward(ballot): + for ballot in ballots: + for r in ballot: + if r.id not in count or len(count[r.id]) < len(ballot): + log.debug("count[%d] <- %d elements", r.id, len(ballot)) + count[r.id] = [0] * len(ballot) + candidates[r.id] = r + pprint(candidates) + for ballot in ballots: + for pos, r in enumerate(ballot): + count[r.id][pos] += 1 + + pprint(count) + return loser, new_ballots + if __name__ == "__main__": args = get_args() @@ -74,7 +91,7 @@ if __name__ == "__main__": result = [] while max(len(b) for b in ballots): dump_ballots(ballots) - loser, ballots = runoff(ballots) + loser, ballots = runoff_forward(ballots) result.append(loser) result = reversed(result) print("final result")