Implememen backwards runoff

This commit is contained in:
Peter J. Holzer 2023-05-12 21:18:00 +02:00
parent 977ecf9d07
commit f8226fa5a2
1 changed files with 20 additions and 3 deletions

View File

@ -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")