#!/usr/bin/perl -w

use strict;

use vars qw (@kraje @hlasyvkraji @mandatyvkraji %mandatystran);

@kraje=(
"Hlavní město Praha",
"Středočeský kraj",
"Jihočeský kraj",
"Plzeňský kraj",
"Karlovarský kraj",
"Ústecký kraj",
"Liberecký kraj",
"Královéhradecký kraj",
"Pardubický kraj",
"Vysočina",
"Jihomoravský kraj",
"Olomoucký kraj",
"Zlínský kraj",
"Moravskoslezský kraj",
);

open P, "qdist";
my $zzz = <P>; chomp $zzz;
@mandatyvkraji=split(/\s/, $zzz);
close P;

#print "Metoda: Sainte-Lague\n";
print "Metoda: d'Hondt\n";

print "Mandatu celkem: ";
my $tot; foreach (@mandatyvkraji) { $tot += $_; }
print "$tot\n";

open Q, "q";
while (<Q>) {
	chomp;
	split;
	my $name = shift @_;
	for (my $i = 0; $i <= $#_; $i++) {
		push (@{$hlasyvkraji[$i]}, [$name, $_[$i]]);
	}
}
close Q;

print "* Mandaty dle kraju:\n";

for (my $kraj = 0; $kraj <= $#hlasyvkraji; $kraj++) {
	my @dhondt = ();
	foreach my $strana (@{$hlasyvkraji[$kraj]}) {
		# predpokladame pro kazdou stranu min. dvacet mist na kandidatce
		my ($name, $hlasu) = @$strana;
		for (my $i = 1; $i <= 30; $i++) {
			# Sainte-Lague:
			# push (@dhondt, [$name, $hlasu/($i*2-1)]);
			# d'Hondt:
			push (@dhondt, [$name, $hlasu/$i]);
		}
	}
	my @list = reverse (sort { $a->[1] <=> $b->[1] } @dhondt);
	my @mlist = splice(@list, 0, $mandatyvkraji[$kraj]);
	print "V kraji $kraje[$kraj]:\n";
	foreach my $mandat (@mlist) {
		my ($name, $hlasu) = @$mandat;
		push(@{$mandatystran{$name}}, [$kraj, $hlasu]);
		print "\t$name - $hlasu\n";
	}
	foreach my $mandat (splice(@list, 0, 4)) {
		my ($name, $hlasu) = @$mandat;
		print "\t$name - $hlasu - ---OUT---\n";
	}
}
print "\n";

print "* Mandaty dle stran:\n";
foreach my $strana (keys %mandatystran) {
	print "$strana:\n";
	foreach my $mandat (@{$mandatystran{$strana}}) {
		print "\t$kraje[$mandat->[0]] - $mandat->[1]\t\n";
	}
}
print "\n";

print "* Celkem:\n";
foreach my $strana (keys %mandatystran) {
	my $mandatu = $#{$mandatystran{$strana}}+1;
	print "$strana - $mandatu\n";
}
print "\n";
