From 713371c66a17509427438ad9fe7e30ad54cf227e Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 21 Aug 2016 21:20:46 +0100 Subject: [PATCH] compute-scottish-stv: fixes Signed-off-by: Ian Jackson --- compute-scottish-stv | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/compute-scottish-stv b/compute-scottish-stv index 4715808..57ff8a8 100755 --- a/compute-scottish-stv +++ b/compute-scottish-stv @@ -158,7 +158,8 @@ sub countballots () { $c->{History}[$stage-1] = $c->{Total}; } - foreach my $c (reverse sort total_history_cmp values %cands) { + foreach my $c (reverse sort total_history_cmp + grep { !$_->{NonCont} } values %cands) { prf "candidate %-10s: %10s votes\n", $c->{Cand}, $c->{Total}; } } @@ -173,13 +174,15 @@ sub computequota () { sub total_history_cmp () { my $ha = $a->{History}; my $hb = $b->{History}; + my $m = "stage $stage history cmp $a->{Cand} $b->{Cand}"; + print DEBUG "$m...\n"; foreach my $s (reverse 0 .. $stage-1) { my $d = $ha->[$s] <=> $hb->[$s]; next unless $d; - print DEBUG "history cmp $a->{Cand} $b->{Cand}". - " => $d (#$s $ha->[$s] $hb->[$s])\n"; + print DEBUG "$m => $d (#$s $ha->[$s] $hb->[$s])\n"; return $d; } + print DEBUG "$m => 0\n"; return 0; } @@ -208,13 +211,14 @@ sub select_best_worst ($$$$) { for (;;) { my $nextc = $maybe[$nequal]; + last unless $nextc; # Only interested in those who compare equal according to the # history (SLGEO 49(2)); NB our history includes the current # round. last if $signum*($a = $maybe[0], $b = $nextc, total_history_cmp) > 0; - $nextc++; + $nequal++; } if ($nequal > 1 && !$wanttiebreak->($maybe[0]{Total})) { @@ -322,7 +326,7 @@ for (;;) { -1, 'eliminating'; if ($c) { - prf "=== eliminating %s (%s) ===\n", $c->{Cand}, $c->{Desc}; + prf "=== eliminating %s \`%s' ===\n", $c->{Cand}, $c->{Desc}; $c->{NonCont} = 'Eliminated'; next; } -- 2.30.2