#!/usr/local/bin/perl -w use strict; $| = 1; my @all = ((5) x 6, (10) x 6); # twelve voters: six voting up to 5, six voting up to 10 for my $own (5, 10) { # your own vote my $i = 0; my @others = grep $_ != $own || $i++, @all; # remove your vote from the list for now... my(%r, %n); for (1 .. 5000) { my @voters = shuffle(@others); # shuffle the other votes splice @voters, my $pos = int(rand @voters+1), 0, $own; # put your vote back in, and save the position my $rep = 0; for my $v (@voters) { $rep++ if $rep < $v; } # calculate the reputation $r{$pos} += $rep; $n{$pos}++; # adjust the stats for this position } print "$own:\n"; for (sort { $a <=> $b } keys %n) { printf " %2d %4d %4.2f\n", $_, $n{$_}, $r{$_} / $n{$_}; } # print position, number of occurences, and average reputation } sub shuffle { my @list = @_; for (my $i = $#list; $i >= 0; --$i) { my $j = int rand $i + 1; @list[$i, $j] = @list[$j, $i]; } @list; } #### 5: 0 411 8.77 1 404 8.80 2 409 8.77 3 414 8.74 4 411 8.76 5 452 8.25 6 393 8.36 7 425 8.28 8 409 8.32 9 417 8.31 10 444 8.29 11 411 8.23 10: 0 386 8.17 1 439 8.15 2 420 8.25 3 435 8.14 4 393 8.21 5 407 8.74 6 437 8.73 7 412 8.71 8 444 8.69 9 402 8.67 10 399 8.77 11 426 8.75