#! perl -slw use strict; use List::Util qw[ sum ]; our $N ||= 9; #my @data = ( 9,1,1,1,1,1,1,1,1,1 ); my @data = map{ int rand( $N ) } 1 .. $N; my @a = @data[ 0 .. $#data / 2 ]; my @b = @data[ $#data / 2 + 1 .. $#data ]; my $diff = abs( sum( @a ) - sum( @b ) ); print "$diff : [@a] [@b]"; OUTER: for my $ai ( 0 .. $#a ) { for my $bi ( 0 .. $#b ) { if( abs( sum( @a[ 0 .. $ai-1, $ai+1 .. $#a ], $b[ $bi ] ) - sum( @b[ 0 .. $bi-1, $bi+1 .. $#b ], $a[ $ai ] ) ) < $diff ) { my $temp = $a[ $ai ]; $a[ $ai ] = $b[ $bi ]; $b[ $bi ] = $temp; $diff = abs( sum( @a ) - sum( @b ) ); print "$diff : [@a] [@b]"; last OUTER if $diff == 0; } } }