Permutations: Difference between revisions
Content added Content deleted
SqrtNegInf (talk | contribs) m (→{{header|Perl}}: cleaned up) |
|||
Line 4,572:
=={{header|Perl}}==
<lang perl>sub permutation {▼
my ($perm,@set) = @_;▼
print "$perm\n" || return unless (@set);▼
permutation($perm.$set[$_],@set[0..$_-1],@set[$_+1..$#set]) foreach (0..$#set);▼
}▼
permutation('',@input);</lang>▼
{{out}}▼
<pre>abcd▼
abdc
acbd
acdb
adbc
adcb
bacd
badc
bcad
bcda
bdac
bdca
cabd
cadb
cbad
cbda
cdab
cdba
dabc
dacb
dbac
dbca
dcab
dcba</pre>▼
For better performance, use a module like <code>ntheory</code> or <code>Algorithm::Permute</code>.
{{libheader|ntheory}}
<lang perl>use ntheory qw/forperm/;
Line 4,586 ⟶ 4,612:
forperm {
print "@tasks[@_]\n";
}
{{out}}
<pre>
Line 4,595 ⟶ 4,621:
study party sleep
study sleep party
▲</pre>
▲A simple recursive routine:
▲<lang perl>sub permutation {
▲ my ($perm,@set) = @_;
▲ print "$perm\n" || return unless (@set);
▲ permutation($perm.$set[$_],@set[0..$_-1],@set[$_+1..$#set]) foreach (0..$#set);
▲}
▲my @input = (qw/a 2 c 4/);
▲permutation('',@input);</lang>
▲{{out}}
▲<pre>
</pre>
|