usingMaths.com
Demonstrating and showing pupils and students one application of Mathematics.



Versions on Permutation Algorithm in Perl




loading...
Algorithm by: Educator usingMaths

Our Permutation code in Perl.


Permutation Class File:


package PERMUTATION;

BEGIN {
    require Exporter;

    # for the sake of standard
    our $VERSION = 2017.10;

    # Inherit from exporter to export subs and variables
    our @ISA = qw(Exporter);

    # subs and variables to be exported by default
    our @EXPORT_OK = qw(possibleWordPermutations);
}

use 5.010;
use warnings;
use strict;

our @words;
our $r# min length of word
my @local_store# array of references
my @perm_store# array of references
my $eye;
my $combination;

# simulate an object construct
sub new {
    my $self = shift;
    
    my $this = {};
    bless $this$self;
    
    return $this;
}

# till the ground for shuffle to grind on
# returns an array reference of references to array strings
sub possibleWordPermutations {
    shift;
    my $arg = shift;
    @words = @{$arg};
    $r = shift;
    @perm_store = ();
    
    use COMBINATION;
    my $call = COMBINATION->new();
    $combination receives an array reference of references
    $combination = $call->possibleWordCombinations(\@words$r);
    
    # illegal 'r' value
    if (!defined $combination->[0] || $r == 1) {
        @perm_store = @{$combination};
    } else {
        
        for (0 .. $#{$combination}) {
            $eye = $r - 1;
            # copy up last two elements of 'comb_store.get(i)'
            my @last_two = ([""""], [""""]); # array of references
            $last_two[0]->[0] = $last_two[1]->[1] = $combination->[$_]->[$eye--];
            $last_two[0]->[1] = $last_two[1]->[0] = $combination->[$_]->[$eye--];
            
            @local_store = (); # array of references
            push @local_store$last_two[0], $last_two[1];
            shuffleWord([@local_store], $_if $r > 2;

            push @perm_store@local_store;
        }
    }
    return \@perm_store;
}

sub shuffleWord {
    my $arg_store = shift# array reference of references
    my $i = shift;
    @local_store = ();
    my @members;
    for my $entry (@{$arg_store}) {
        @members = @{$entry};
        # add 'comb_store[i][eye]' element to this list of members
        push @members$combination->[$i]->[$eye];

        my $shift_index = scalar @members;
        # shuffle this pack of words
        while ($shift_index > 0) {
            # skip if already in store -- /* array comparism */
            my ($contains) = grep { @{$local_store[$_]} ~~ @members } 0 .. $#local_store;
            if (!defined $contains) {
                push @local_store, [@members];
            }
            # interchange these two neighbours
            if (--$shift_index > 0 && $members[$shift_index] ne $members[$shift_index - 1]) {
                @members[$shift_index - 1$shift_index] = @members[$shift_index$shift_index - 1];
            }
        }
    }
    # Are there any elements left? repeat if yes
    if ($eye-- > 0) {
        shuffleWord([@local_store], $i);
    }
}

1;


Main Class:


#!/usr/bin/perl;

use strict;
use warnings;

use PERMUTATION;

my @subjects = ("Eno""Chidi""Olu""Ahmed""Osas""Gbeda");
my $r = 4;

# Use the permutation module/class
my $perm = PERMUTATION->new();

$result receives an array reference of references
my $result = $perm->possibleWordPermutations(\@subjects$r);

print ("[", join(", ", @subjects), "] permutation ", $r, ":\n\n");
# for each array reference in a dereferenced '$result'
my $i = 0;
print (++$i": ", join(", ", @{$_}), "\n"for @{$result};
print ("\n\nNumber of ways is ", scalar @{$result}, ".");

print "\n\n";


Try it out!

Ownership (1) Simplicity (0.0) Elegance (0.0)
loading...
colormap #003366 #336699 #3366CC #003399 #000099 #0000CC #000066 #006666 #006699 #0099CC #0066CC #0033CC #0000FF #3333FF #333399 #669999 #009999 #33CCCC #00CCFF #0099FF #0066FF #3366FF #3333CC #666699 #339966 #00CC99 #00FFCC #00FFFF #33CCFF #3399FF #6699FF #6666FF #6600FF #6600CC #339933 #00CC66 #00FF99 #66FFCC #66FFFF #66CCFF #99CCFF #9999FF #9966FF #9933FF #9900FF #006600 #00CC00 #00FF00 #66FF99 #99FFCC #CCFFFF #CCCCFF #CC99FF #CC66FF #CC33FF #CC00FF #9900CC #003300 #009933 #33CC33 #66FF66 #99FF99 #CCFFCC #FFFFFF #FFCCFF #FF99FF #FF66FF #FF00FF #CC00CC #660066 #336600 #009900 #66FF33 #99FF66 #CCFF99 #FFFFCC #FFCCCC #FF99CC #FF66CC #FF33CC #CC0099 #993399 #333300 #669900 #99FF33 #CCFF66 #FFFF99 #FFCC99 #FF9999 #FF6699 #FF3399 #CC3399 #990099 #666633 #99CC00 #CCFF33 #FFFF66 #FFCC66 #FF9966 #FF6666 #FF0066 #CC6699 #993366 #999966 #CCCC00 #FFFF00 #FFCC00 #FF9933 #FF6600 #FF5050 #CC0066 #660033 #996633 #CC9900 #FF9900 #CC6600 #FF3300 #FF0000 #CC0000 #990033 #663300 #996600 #CC3300 #993300 #990000 #800000 #993333
Drop Your Version!
Login Please!

colormap #003366 #336699 #3366CC #003399 #000099 #0000CC #000066 #006666 #006699 #0099CC #0066CC #0033CC #0000FF #3333FF #333399 #669999 #009999 #33CCCC #00CCFF #0099FF #0066FF #3366FF #3333CC #666699 #339966 #00CC99 #00FFCC #00FFFF #33CCFF #3399FF #6699FF #6666FF #6600FF #6600CC #339933 #00CC66 #00FF99 #66FFCC #66FFFF #66CCFF #99CCFF #9999FF #9966FF #9933FF #9900FF #006600 #00CC00 #00FF00 #66FF99 #99FFCC #CCFFFF #CCCCFF #CC99FF #CC66FF #CC33FF #CC00FF #9900CC #003300 #009933 #33CC33 #66FF66 #99FF99 #CCFFCC #FFFFFF #FFCCFF #FF99FF #FF66FF #FF00FF #CC00CC #660066 #336600 #009900 #66FF33 #99FF66 #CCFF99 #FFFFCC #FFCCCC #FF99CC #FF66CC #FF33CC #CC0099 #993399 #333300 #669900 #99FF33 #CCFF66 #FFFF99 #FFCC99 #FF9999 #FF6699 #FF3399 #CC3399 #990099 #666633 #99CC00 #CCFF33 #FFFF66 #FFCC66 #FF9966 #FF6666 #FF0066 #CC6699 #993366 #999966 #CCCC00 #FFFF00 #FFCC00 #FF9933 #FF6600 #FF5050 #CC0066 #660033 #996633 #CC9900 #FF9900 #CC6600 #FF3300 #FF0000 #CC0000 #990033 #663300 #996600 #CC3300 #993300 #990000 #800000 #993333
Remark!
Login Please!

colormap #003366 #336699 #3366CC #003399 #000099 #0000CC #000066 #006666 #006699 #0099CC #0066CC #0033CC #0000FF #3333FF #333399 #669999 #009999 #33CCCC #00CCFF #0099FF #0066FF #3366FF #3333CC #666699 #339966 #00CC99 #00FFCC #00FFFF #33CCFF #3399FF #6699FF #6666FF #6600FF #6600CC #339933 #00CC66 #00FF99 #66FFCC #66FFFF #66CCFF #99CCFF #9999FF #9966FF #9933FF #9900FF #006600 #00CC00 #00FF00 #66FF99 #99FFCC #CCFFFF #CCCCFF #CC99FF #CC66FF #CC33FF #CC00FF #9900CC #003300 #009933 #33CC33 #66FF66 #99FF99 #CCFFCC #FFFFFF #FFCCFF #FF99FF #FF66FF #FF00FF #CC00CC #660066 #336600 #009900 #66FF33 #99FF66 #CCFF99 #FFFFCC #FFCCCC #FF99CC #FF66CC #FF33CC #CC0099 #993399 #333300 #669900 #99FF33 #CCFF66 #FFFF99 #FFCC99 #FF9999 #FF6699 #FF3399 #CC3399 #990099 #666633 #99CC00 #CCFF33 #FFFF66 #FFCC66 #FF9966 #FF6666 #FF0066 #CC6699 #993366 #999966 #CCCC00 #FFFF00 #FFCC00 #FF9933 #FF6600 #FF5050 #CC0066 #660033 #996633 #CC9900 #FF9900 #CC6600 #FF3300 #FF0000 #CC0000 #990033 #663300 #996600 #CC3300 #993300 #990000 #800000 #993333
Edit Your Algorithm!
Login Please!

colormap #003366 #336699 #3366CC #003399 #000099 #0000CC #000066 #006666 #006699 #0099CC #0066CC #0033CC #0000FF #3333FF #333399 #669999 #009999 #33CCCC #00CCFF #0099FF #0066FF #3366FF #3333CC #666699 #339966 #00CC99 #00FFCC #00FFFF #33CCFF #3399FF #6699FF #6666FF #6600FF #6600CC #339933 #00CC66 #00FF99 #66FFCC #66FFFF #66CCFF #99CCFF #9999FF #9966FF #9933FF #9900FF #006600 #00CC00 #00FF00 #66FF99 #99FFCC #CCFFFF #CCCCFF #CC99FF #CC66FF #CC33FF #CC00FF #9900CC #003300 #009933 #33CC33 #66FF66 #99FF99 #CCFFCC #FFFFFF #FFCCFF #FF99FF #FF66FF #FF00FF #CC00CC #660066 #336600 #009900 #66FF33 #99FF66 #CCFF99 #FFFFCC #FFCCCC #FF99CC #FF66CC #FF33CC #CC0099 #993399 #333300 #669900 #99FF33 #CCFF66 #FFFF99 #FFCC99 #FF9999 #FF6699 #FF3399 #CC3399 #990099 #666633 #99CC00 #CCFF33 #FFFF66 #FFCC66 #FF9966 #FF6666 #FF0066 #CC6699 #993366 #999966 #CCCC00 #FFFF00 #FFCC00 #FF9933 #FF6600 #FF5050 #CC0066 #660033 #996633 #CC9900 #FF9900 #CC6600 #FF3300 #FF0000 #CC0000 #990033 #663300 #996600 #CC3300 #993300 #990000 #800000 #993333
Edit Your Remark!
Login Please!

Delete Post >

Delete Comment >

Please wait...