#!/usr/local/bin/perl -w @votos = qw(0 391000 311000 184000 73000 27000 12000 2000); $escanos = 21; $partidos = @votos-1; for $i (1..$partidos){ for $j ( 1 .. $escanos ) { $n = $votos[$i]/$j; push @cocientes, $n; $hash{$n} = "$i ronda $j"; } } @coc_sorted = sort { $b <=> $a } @cocientes; for $i (1..$escanos) { $j = $coc_sorted[$i-1]; print "Escaño $i asignado al partido $hash{$j}, $j\n"; $hash{$j} =~ s/(\d+)\s.*/$1/; $total[$hash{$j}]++; } for $i (1..$partidos){ unless (defined $total[$i]) { $total[$i] = 0; } print "Partido $i -> $total[$i] escaños, $votos[$i] votos\n"; } exit; __END__ Esto es simplemente una utilidad para probar cómo funciona la ley D'Hondt. Sólo hay que introducir el total de votos y un 0 en la primera posición, para que el código sea más legible. Habitualmente se añade la restricción de que un partido supere un determinado porcentaje, como el 3%, que no es contemplado aquí. BUGS No se contemplan empates, que serían demasiado raros.