We don't bite newbies here... much PerlMonks

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

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

in reply to Puzzle: need a more general algorithm

I think this code is usable:

```use strict;

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

my @Best = ();
my \$Min_height = 1E9;
&check_columns ( [ 0 .. \$#height ] );

print "best result: \n";
# print join(" ", map { join('#', @\$_) } @Best), "\n";
foreach my \$y (0..\$Table_height) {
foreach my \$x (0..\$columns) {
my \$data = \${\$Best[\$x]}[\$y];
print defined \$data ? \$data : " ";
print "   ";
}
print "\n";
}

# check column height combinations
sub check_columns {
my \$pcat = shift;
foreach my \$p (0 .. \$#{@\$pcat} - 1) {
my @result = ( [ @\$pcat[0 .. \$p] ], [ @\$pcat[\$p + 1 .. \$#{@\$pc
+at}] ], @_);
if (\$#result == \$columns) {

# @result is an array of arrays
# print join(" ", map { join('#', @\$_) } @result), "\n";

my \$max_height = 0;
foreach my \$j (@result) {
my \$height = 0;
# foreach my \$i (@\$j) { print "\$i:\$height[\$i] "; }; pr
+int "\n";
foreach my \$i (@\$j) { \$height += \$height[\$i] };
\$max_height = \$height if \$height > \$max_height;
}
# print "max_height: \$max_height\n";

if (\$max_height < \$Min_height) {
\$Min_height = \$max_height;
@Best = @result;
}

}
else {
check_columns(@result);
}
}
}

It prints:

```best result:
0   2   3   4
1           5

You can un-comment the print lines to check how it works.

@Best is an array-of-arrays.

Update: show table.

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

By the way, \$columns = 2 gives:

```best result:
0   3   4
1       5
2

\$columns = 4 gives:

```best result:
0   1   2   3   4
5

Create A New User
Node Status?
node history
Node Type: note [id://180456]
help
Chatterbox?
 [tobyink]: You can use grep { \$_ =~ /.*\$in.*/; } @my_modules but why not stick to grep(/.*\$in.*/, @my_modules)? (The latter is faster.) [shmem]: Lady_Aleena, in the first example grep evaluates the result from grep and if true, returns \$_. In the second, it always returns \$_ [shmem]: ..the result from the pattern match [Lady_Aleena]: tobyink, I did after I failed to get the BLOCK to work. I can't seem to get my brain around grep BLOCK, though I'm okay with grep EXPR. [shmem]: so in the second example grep returns all true elements of the list passed [Lady_Aleena]: Okay, so grep BLOCK is not like map BLOCK where something might need to be returned at the end. [tobyink]: grep { \$_ =~ /.*\$in.*/; } @my_modules should work just fine. The problem is that you were adding on ;\$_ at the end of the block. Why were you doing that? [Lady_Aleena]: tobyink, I was thinking map. [tobyink]: Something does need to be returned at the end… not \$_ though. You need to return (something that will be evaluated as) a boolean. [Lady_Aleena]: Here is a longish map I did in the same script. my @my_modules = map { my \$file = \$_; \$file =~ s/\$module_director y(.+)\.pm/\$1/; \$file =~ s/\//::/g; \$file; } @files;

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (7)
As of 2017-05-27 07:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
My favorite model of computation is ...

Results (192 votes). Check out past polls.