#!/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 ```