#!/usr/local/bin/perl -w

use List::Util qw(shuffle);

$n = $ARGV[0] || 3;    # partitions

$L = 20;               # values

for (0..$L-1){
    $h[$_]=50000+int rand(100000);
    $sum += $h[$_];
}
$promedio = $sum / $n;

$MIN = 9e99;
while (1){
    @hp = shuffle(@h);
    @c=();
    for (1..$n-1){
	push @c , int rand($L-1);  
    }
    push @c, $L-1;
    @cc = sort { $a<=>$b } @c;
    $nn=0;
    @suma=();
    $error = 0;
    for $i (0..$L-1){
	$suma[$nn]+= $hp[$i];
	if ($i == $cc[$nn] || $i == $L-1){
	    $error += abs ($suma[$nn] - $promedio);
	    $nn++;
	}
    }
    if ($error <= $MIN){
	$MIN=$error;
	print "\nPromedio $promedio\n";
	print "ERROR $MIN\n";
	$nn=0;
	for $i (0..$L-1){
	    print "$hp[$i] ";
	    if ($i == $cc[$nn] || $i == $L-1){
		print "-> $suma[$nn]\n";
		$nn++;
	    }
	}
    }
}

__END__
