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); }
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
Outside of code tags, you may need to use entities for some characters:
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.
|
|