Beefy Boxes and Bandwidth Generously Provided by pair Networks Cowboy Neal with Hat
There's more than one way to do things
 
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 perusing the Monastery: (6)
As of 2014-04-19 19:46 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (483 votes), past polls