public
Last active

  • Download Gist
permutation.pl
Perl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
sub permutation {
my ( $desired_permutation, $column_count, $permutation_set ) = @_;
my $permutation_set_count = @$permutation_set;
 
# The total number of permutations
my $total_permutations = $permutation_set_count ** $column_count;
 
# Return if we're being asked for a permutation outside the total number
# possible
return if $desired_permutation >= $total_permutations;
 
# Calculate the desired_permutation in base x where x = $permutations_set_count
my $num = $desired_permutation;
my $base = $permutation_set_count;
 
my $s = [];
 
while (1) {
my $r = $num % $base;
unshift( @$s, $r );
$num = int($num / $base);
last if $num == 0;
}
 
while ( @$s < $column_count ) {
unshift( @$s, 0 );
}
 
# @$s is now a list corresponding to the permutation, where each number is
# an index of the permutation set
 
# Now we build the permutation by substituting those for the set
return join '|', map { $permutation_set->[$_] } @$s;
}
 
my $i=0;
while (1) {
my $p = permutation( $i++, 3, [qw( 0 3 6 9 C F )] );
if ( defined $p ) {
print "$p\n";
} else {
last;
}
}

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.