#!/usr/bin/perl -w $PARTIES = 10; $SEATS = 135; $POPULATION = 5_000_000; # $GR = $VOTES / $SEATS; # golden ratio # Improving D'Hondt law for (1..$PARTIES){ $ran[$_] = rand(); $sumran += $ran[$_]; } for (1..$PARTIES){ $ran[$_] /= $sumran; } for (1..$PARTIES){ $p[$_] = int $ran[$_] * $POPULATION; $sum += $p[$_]; print "Partido $_ -> $p[$_] votos\n"; } print "VOTOS TOTALES: $sum\n"; $GR = $sum / $SEATS; print "Ratio: $GR\n"; for (1..$PARTIES){ $r[$_] = $p[$_] / $GR - int ($p[$_]/$GR); } # Assingning the even seats for $i (1..$PARTIES) { for (1.. $SEATS){ if ($p[$i] >= $GR){ $count++; $seat{$count} = $i; $p[$i] -= $GR; }else { last; } } $remainder{$i} = $r[$i]; # $rem{ $r[$i] } = $i; } # Assingning the odd seats $odd = $SEATS - $count; print "There are $odd odd seats.\n"; @list = sort { $remainder{$b} <=> $remainder{$a} } keys(%remainder); for (0..$odd-1) { $count++; $seat{ $count } = $list[$_]; last if $count == $SEATS; } for (sort { $a <=> $b } keys %seat) { print "$seat{$_} "; } print "\n"; __END__ In 21th December 2017 there was autonomic elections in Catalonia. For 135 seats and around 82% of population (5M) voters, Hondt law assigned 72 seats to the separatist, despite the fact that there are more votes to the non separatist. Around 150K more. This was a mayor fault of the law, and science. Since the mayority is reached with 68 seats, the error is in at least 5 seats, out of 135. BUGS Empates. Y lo que se ha denominado $POPULATION son los votos vĂ¡lidos.