Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re: generate combinations of lists

by gargle (Hermit)
on Sep 28, 2005 at 07:27 UTC ( #495658=note: print w/ replies, xml ) Need Help??


in reply to generate combinations of lists

Hi,

update: clarification

disclaimer: bogoperm, but it does fit your description of the problem!

#!/usr/bin/perl use strict; use warnings; ############# # bogoperm! # ############# my @array = qw(a b c); my $length = @array; # faculty my $fac = 1; foreach my $f (1..$length) { $fac *= $f; } # my results my %hash = (); # internals my $check; # if equals control then we found a number my $control; # has to contain something like 123... my $index; # the number itself, it's an index! my $count = 0; # 'till this equals $fac OUTER: do { INNER: while (1) { do { $check = 0; $control = 0; $index = 0; foreach my $i (1..$length) { my $number = 1+int(rand()*$length); $index += $number * 10**($i-1); $check += 10**$number; $control += 10**$i; } $check /= 10; $control /= 10; } while ($check != $control); last INNER if defined $hash{$index}; $hash{$index}++; $count++; } } while $count != $fac; # print out the results foreach my $i (keys %hash) { my $j; do { $j = $i % 10; print $array[$j-1]; $i = ($i - $j) / 10; } while ($i > 0); print "\n"; }

output:

bash-3.00$ ./perm.pl cba acb bac cab abc bca

I'll leave it as an exercise to put the output in real lists.

Well, at least I used strict and warnings :o

--
if ( 1 ) { $postman->ring() for (1..2); }


Comment on Re: generate combinations of lists
Select or Download Code
Re^2: generate combinations of lists
by Skeeve (Vicar) on Sep 28, 2005 at 14:37 UTC
    No ++ from me because you work with "rand". That's not permutating but "throwing dice" and hoping to get all permutations.

    -- for doing someone's homework ;-)

    $\=~s;s*.*;q^|D9JYJ^^qq^\//\\\///^;ex;print
      No ++ from me because you work with "rand". That's not permutating but "throwing dice" and hoping to get all permutations.

      Um, I think that's the point of it — it's a joke! (Especially considering its name.)

      -- for doing someone's homework ;-)

      But surely approaching a homework question in an intentionally stupid way that they wouldn't get any marks doesn't actually count as doing somebody's homework? I thought gargle's node was humourous, and can't see what's so harmful about it to warrant its negative reputation.

      Smylers

      ++ for correcting me ;-)

      Nevertheless: Still no ++ for the answer because rand is not something I would consider a good solution for permutation. So it's not worth a good reputation. Neither is mine so the (currently) -1 is okay

      $\=~s;s*.*;q^|D9JYJ^^qq^\//\\\///^;ex;print

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (12)
As of 2015-07-04 14:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (60 votes), past polls