7 binmode STDIN, 'encoding(UTF-8)' or die;
8 binmode STDOUT, 'encoding(UTF-8)' or die;
9 binmode STDERR, 'encoding(UTF-8)' or die;
17 $choices{$cho} = { @_, Index => (scalar @choices) };
25 if (m/^([A-Z]+)\s*\=\s*(\S.*)$/) {
26 my ($cho, $desc) = ($1,$2);
28 if ($desc =~ m/\[(\d+):(\d+)\]/) {
31 addchoice($cho, Desc => $desc, Smaj => $smaj);
32 } elsif (m/^V:\s+(\S+)\s+(\S.*)/) {
33 push @invotes, [ $1, $2 ];
40 addchoice('FD', Desc => "Further Discussion");
43 our $chofd = $choices{FD};
45 die "FD has smaj?!" if $chofd->{Smaj};
47 our @vab; # $vab[$ia][$ib] = V(A,B)
49 foreach my $iv (@invotes) {
50 my ($votestr,$voter) = @$iv;
52 length $votestr eq @choices or die "wrong vote vector length";
53 my @vs = split //, $votestr;
54 foreach my $ix (0..$#vs) {
58 } elsif ($vchr =~ m/[0-9a-z]/) {
59 $vs[$ix] = ord($vchr);
64 foreach my $ia (0..$#vs) {
65 foreach my $ib (0..$#vs) {
68 if ($va < $vb) { $vab[$ia][$ib]++; }
69 elsif ($vb < $va) { $vab[$ib][$ia]++; }
73 die "voter $voter $@" if $@;