Permuting using any number of given chars

Discussion in 'Perl Misc' started by Brian Wakem, May 17, 2005.

1. Brian WakemGuest

I can use Algorithm:ermute to output all permutations of 1 2 3

123
132
312
213
231
321

But what I'm looking for is all possible permutations using any number of
the input chars.

Like this -

1
2
3
12
13
21
23
31
32
123
132
312
213
231
321

I can't think of a way right now and I can't find a module that does it.
Any ideas?

--
Brian Wakem

Brian Wakem, May 17, 2005

2. Anno SiegelGuest

Brian Wakem <> wrote in comp.lang.perl.misc:
> I can use Algorithm:ermute to output all permutations of 1 2 3
>
> 123
> 132
> 312
> 213
> 231
> 321
>
>
> But what I'm looking for is all possible permutations using any number of
> the input chars.
>
> Like this -
>
> 1
> 2
> 3
> 12
> 13
> 21
> 23
> 31
> 32
> 123
> 132
> 312
> 213
> 231
> 321
>
>
> I can't think of a way right now and I can't find a module that does it.

Split the problem. You know how to get all permutations for a given
set. So find all subsets of the input characters ('', '3', '2', '23', '1',
'13', '12', '123') and apply your solution to each.

for ( subsets( '123') ) {
print_permutations( \$_);
}

The definition of subsets() is left as an exercise in recursion.

Anno

Anno Siegel, May 17, 2005