13 next unless m/^ R/..0;
15 if (m/^\s+\|[-+]+\s*$/) {
21 my @entries = split /\|/, $';
22 $nboxcols ||= @entries;
23 $nboxcols >= @entries or die;
24 foreach my $cboxcol (0..$#entries) {
25 my $headix = $cboxcol + $cboxrow * $nboxcols;
26 $boxheads[$headix] //= '';
27 $boxheads[$headix] .= $entries[$cboxcol];
32 s/\s+$// foreach @boxheads;
34 my @specials = qw(Exhausted Surplus Threshold);
35 foreach my $si (0..$#specials) {
36 my $hi = @boxheads - @specials + $si;
37 die "$si $hi $boxheads[$hi] ?" unless $boxheads[$hi] eq $specials[$si];
38 $boxheads[$hi] .= " "; # disambiguates
51 die unless (scalar keys %vals) == @boxheads;
52 foreach my $k (sort grep { !m/ $/ } keys %vals) {
54 next unless length $e;
55 printf " candidate %-10s : %20s votes\n",
59 my $quota = $vals{'Threshold '};
60 if ($donequota ne $quota) {
61 printf " quota %10s\n", $quota;
64 my $surplus = $vals{'Surplus '};
65 if ($surplus ne '0') {
66 printf " surplus %10s\n", $surplus;
78 next unless $cboxrow >= 0;
79 die "$cboxrow $1" unless !$cboxrow == !!length $1;
81 printf "stage %d:\n", $1 or die $!;
83 my @entries = split /\|/, $';
84 $nboxcols >= @entries or die;
85 foreach my $cboxcol (0..$#entries) {
86 my $headix = $cboxcol + $cboxrow * $nboxcols;
87 my $h = $boxheads[$headix];
89 die if exists $vals{$h};
90 my $e = $entries[$cboxcol];
93 $e =~ m/^\d*\.\d*$/ or die;
109 sub processfinal () {
112 if (s/^Winners are //) {
116 @w = split / and /, $w[0];
118 $w[$#w] =~ s/^and //;
122 foreach my $i (0..$#w) {
123 printf " %s\n", $w[$i];