Your skill will accomplishwhat the force of many cannot PerlMonks

### finding all combinations

 on Jan 13, 2008 at 20:54 UTC Need Help??
Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hello fellow monks, I wanted to ask the following:
Say you have 3 arrays, like
@array1=(1,2,3) , @array2(7,8) and array3=(1,5,23,3);
Is there a way to find all combinations? I mean:
1-7-1, 1-7-5, 1-7-23, 1-7-3, 1-8-1, 1-8-5, 1-8-23, 1-8-3, 2-7-1, 2-7-5, 2-7-23, 2-7-3, 2-8-1, 2-8-5, 2-8-23, 2-8-3, 3-7-1, 3-7-5, 3-7-23, 3-7-3, 3-8-1, 3-8-5, 3-8-23, 3-8-3
I tried using:
for (\$i==0;\$i<=\$array1;\$i++) { for (\$j==0;\$j<=\$array2;\$j++) { for (\$k==0;\$k<=\$array3;\$k++) { print \$array1[\$i], "\t", \$array2[\$j], "\t", \$ar +ray[\$k], "\n"; } } }
but it only prints 1-7-1, 1-7-5, 1-7-23, 1-7-3 Could you give me any hint please?

Replies are listed 'Best First'.
Re: finding all combinations
by Jim (Curate) on Jan 13, 2008 at 21:16 UTC
Re: finding all combinations
by BrowserUk (Pope) on Jan 14, 2008 at 01:50 UTC

Just because it uses List::Comprehensions which I recently discovered and absolutely love:

use List::Comprehensions;; comp1 { print join '-', @_ } [1,2,3], [7,8], [1,5,23,3];; 1-7-1 1-7-5 1-7-23 1-7-3 1-8-1 1-8-5 1-8-23 1-8-3 2-7-1 2-7-5 2-7-23 2-7-3 2-8-1 2-8-5 2-8-23 2-8-3 3-7-1 3-7-5 3-7-23 3-7-3 3-8-1 3-8-5 3-8-23 3-8-3

Or if you prefer:

comp1 { print join '-', reverse @_ } [1,5,23,3], [7,8], [1,2,3];; 1-7-1 2-7-1 3-7-1 1-8-1 2-8-1 3-8-1 1-7-5 2-7-5 3-7-5 1-8-5 2-8-5 3-8-5 1-7-23 2-7-23 3-7-23 1-8-23 2-8-23 3-8-23 1-7-3 2-7-3 3-7-3 1-8-3 2-8-3 3-8-3

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
Re: finding all combinations
by Anonymous Monk on Jan 13, 2008 at 21:50 UTC
Also, your loop comparison should be \$i <= \$#array1 or \$i < @array1, not \$i <= \$array1, which tries to compare \$i to some (probably newly created) scalar \$array1.

Strong Suggestion: always use warnings; and use strict;, which would have alerted you to some, at least, of the errors noted.

Another Suggestion: try using the Perl-style rather than the C-style for loop:

for my \$i (@array1) { for my \$j (@array2) { ... } }
Re: finding all combinations
by aquarium (Curate) on Jan 13, 2008 at 21:21 UTC
variable initialization/assignment is with "=" and not with "==", which is what you have inside your for loops. you're also missing a "3" in your print statement, which should end in \$array3\$k and not \$array\$k
the hardest line to type correctly is: stty erase ^H
Re: finding all combinations
by lima1 (Curate) on Jan 13, 2008 at 23:20 UTC
use strict; use warnings; my @array1 = (1,2,3); my @array2 = (7,8); my @array3 = (1,5,23,3); sub to_string { return '{' . join(q{,}, @_) . '}'; } print "\$_ " while glob to_string(@array1) . q{-} . to_string(@array2) +. q{-} . to_string(@array3); __END__ 1-7-1 1-7-5 1-7-23 1-7-3 1-8-1 1-8-5 1-8-23 1-8-3 2-7-1 2-7-5 2-7-23 2 +-7-3 2-8-1 2-8-5 2-8-23 2-8-3 3-7-1 3-7-5 3-7-23 3-7-3 3-8-1 3-8-5 3- +8-23 3-8-3
Update: Ah nice jwkrahn :) Did not know \$".
Or more succinctly:
my @array1 = (1,2,3); my @array2 = (7,8); my @array3 = (1,5,23,3); \$" = ','; print "\$_ " while glob "{@array1}-{@array2}-{@array3}";
Re: finding all combinations
by roboticus (Chancellor) on Jan 14, 2008 at 03:00 UTC
Re: finding all combinations
by brx (Pilgrim) on Jan 15, 2008 at 14:39 UTC
Using idea of ikegami ( N-Queens problem with a regex (again) )
With regex :
my @array1=(1,2,3); my @array2=(7,8); my @array3=(1,5,23,3); " @array1 , @array2 , @array3 " =~ / (\S+) .*?,.*? (\S+) .*?,.*? (\S+) (?{ push @res,"\$1-\$2-\$3"; + })(?!)/; print join ', ',@res;
Re: finding all combinations
by dokkeldepper (Friar) on Jan 18, 2008 at 12:53 UTC
ALgorithm::Combinatorics has everything you might ever combine.

Create A New User
Node Status?
node history
Node Type: perlquestion [id://662212]
Approved by Corion
Front-paged by SparkeyG
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (2)
As of 2018-02-22 21:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
When it is dark outside I am happiest to see ...

Results (299 votes). Check out past polls.

Notices?