Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: Combinations of an array of arrays...?

by thospel (Hermit)
on Oct 08, 2004 at 16:23 UTC ( [id://397696]=note: print w/replies, xml ) Need Help??


in reply to Combinations of an array of arrays...?

Here is a quick and dirty version that doesn't generate all combinations and then filter, but only does the strictly needed work (I assume the array elements have length 1):
#!/usr/bin/perl -wl use strict; print for generate(4, [qw(a b c)], [qw(d e)], [qw(f g h)], ["i"], [qw(j k)], ["l"], ["m"]); sub generate { my $min = shift; my @non_empty = grep @$_, @_; return if $min > @non_empty; work($min, @non_empty); } sub work { my $min = shift; return "" if !@_; my $first = shift; return map { my $n = $_; length() < $min ? () : $_, map $_.$n, @$first; } work($min-1, @_); }
update: A purely iterative version of the above:
sub generate { my $min = shift; my @arrays = grep @$_, @_; $min -= @arrays; return if $min > 0; my @current = (""); for my $array (@arrays) { $min++; @current = map { my $n = $_; length() < $min ? () : $_, map $n.$_, @$array; } @current; } return @current; }

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://397696]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (3)
As of 2024-04-24 20:22 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found