Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
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";
    }
  }
} 
Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://29373]
help
Chatterbox?
talexb finishes writing a Cranky Old Man post, and hopes it will be taken in the spirit intended. :)
[Corion]: We're happy to have you here, talexb!
[talexb]: Thanks. :)

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (11)
As of 2018-07-19 14:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    It has been suggested to rename Perl 6 in order to boost its marketing potential. Which name would you prefer?















    Results (410 votes). Check out past polls.

    Notices?