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