### Re: Puzzle: need a more general algorithm

by fglock (Vicar)
 on Jul 09, 2002 at 17:52 UTC ( #180554=note: print w/replies, xml ) Need Help??

in reply to Puzzle: need a more general algorithm

Another way to do it (works!)

```use strict;

my @height     = qw/ 10 15 25 30 10 13 /;
my \$columns = 3;

my @Best = ();
my \$Min_height = 1E9;
my \$Table_height = 0;
&check_columns;
foreach my \$y (0..\$Table_height) {
foreach my \$x (0..\$columns) {
my \$data = \${\$Best[\$x]}[\$y];
print defined \$data ? \$data : " ";
print "   ";
}
print "\n";
}

sub check_columns {
my \$pcat = ( shift or [ 0 .. \$#height ] );
my @a = @\$pcat;
my @b = ();
map {
push @b, shift @a;
my @result = ( [@a], [@b], @_);
if (\$#result == \$columns) {
my \$max_height = 0;
my \$table_height = 0;
foreach my \$j (@result) {
my \$height = eval join '+' => @height[@\$j];
\$max_height = \$height if \$height > \$max_height;
\$table_height = \$#{@\$j} if \$table_height < \$#{@\$j};
}
if (\$max_height < \$Min_height) {
\$Min_height = \$max_height;
@Best = @result;
\$Table_height = \$table_height;
}
}
else {
check_columns(@result);
}
} @a;
}

Update: I should have used for (@a) instead of map.

Replies are listed 'Best First'.
Re: Re: Puzzle: need a more general algorithm
by fglock (Vicar) on Jul 09, 2002 at 18:27 UTC

This is definitely not optimized.

More than 20 minutes have passed and (50, 1..150) didn't finish yet...

Update: got Out of memory

Create A New User
Node Status?
node history
Node Type: note [id://180554]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (3)
As of 2018-05-28 02:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
World peace can best be achieved by:

Results (199 votes). Check out past polls.

Notices?