$cboxrow++;
next;
}
+ s/\n$//;
if (m/^\s+[R ]\|/) {
my @entries = split /\|/, $';
$nboxcols ||= @entries;
my %vals;
my $donequota = 'X';
while (<>) {
+ s/\n$//;
if (m/^\s+\|--/) {
if ($cboxrow >= 0) {
die unless $cboxrow;
die unless (scalar keys %vals) == @boxheads;
- foreach my $k (sort grep { m/\S/ } keys %vals) {
- print " candidate %10s : %20s votes\n" or die $!;
+ foreach my $k (sort grep { !m/ $/ } keys %vals) {
+ my $e = $vals{$k};
+ next unless length $e;
+ printf " candidate %-10s : %20s votes\n",
+ $k, $e
+ or die $!;
}
my $quota = $vals{'Threshold '};
if ($donequota ne $quota) {
- print " quota %10d\n", $quota;
+ printf " quota %10s\n", $quota;
$donequota = $quota;
}
my $surplus = $vals{'Surplus '};
if ($surplus ne '0') {
- print " surplus %10d\n", $surplus;
+ printf " surplus %10s\n", $surplus;
}
}
$cboxrow = -1;
next;
}
if (m/^\s*(\d*)\|/) {
- die $cboxrow unless $cboxrow >= 0;
- die $cboxrow unless !!$cboxrow == !!length $1;
+ next unless $cboxrow >= 0;
+ die "$cboxrow $1" unless !$cboxrow == !!length $1;
if (length $1) {
- print "stage Td:\n", $1 or die $!;
+ printf "stage %d:\n", $1 or die $!;
}
my @entries = split /\|/, $';
$nboxcols >= @entries or die;
die if exists $vals{$h};
my $e = $entries[$cboxcol];
$e =~ s/^\s+//;
- $e =~ m/^\d*\.\d*$/ or die;
- $e =~ m/\d/ or die;
- $e =~ s/\.0+$//;
+ if (length $e) {
+ $e =~ m/^\d*\.\d*$/ or die;
+ $e =~ m/\d/ or die;
+ $e =~ s/\.0+$//;
+ }
$vals{$h} = $e;
}
+ $cboxrow++;
+ next;
+ }
+ if (!m/\S/) {
+ last;
+ }
+ die;
+ }
+}
+
+sub processfinal () {
+ while (<>) {
+ s/\n$//;
+ if (s/^Winners are //) {
+ s/\.$//;
+ my @w = split /\, /;
+ if (@w == 1) {
+ @w = split / and /, $w[0];
+ } else {
+ $w[$#w] =~ s/^and //;
+ }
+ print "Winners:\n";
+ @w = sort @w;
+ foreach my $i (0..$#w) {
+ printf " %s\n", $w[$i];
+ }
+ print "done.\n";
}
-
-
+ }
}
parseheader();
processbody();
+processfinal();