Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Permuting n elements

by tilly (Archbishop)
on Aug 24, 2000 at 08:19 UTC ( #29373=snippet: print w/ replies, xml ) Need Help??

Description: This is a faster version of How do I permute N elements of a list?. The odds are very good that it spends more time printing than permuting. Put in an if test around the print to print, say, every 100 lines or so to see it really fly.

The reason that it is more efficient than the FAQ is that it spends as little energy copying data as possible.

#!/usr/bin/perl -n
# tsc-permute: permute each word of input
use subs qw( _permute );
permute(split);

{
  my @perm;
  my @unperm;

  sub permute {
    @perm = ();
    @unperm = @_;
    _permute;
  }

  sub _permute {
    if (@unperm) {
      push @perm, pop @unperm;
      foreach (1..@perm) {
        push @perm, shift @perm;
        _permute;
      }
      push @unperm, pop @perm;
    }
    else {
      print "@perm\n";
    }
  }
} 
Comment on Permuting n elements
Download Code

Back to Snippets Section

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://29373]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (15)
As of 2014-09-30 17:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (379 votes), past polls