From e036b2bf1ec27bdac238335ace9c906b02f72385 Mon Sep 17 00:00:00 2001 From: Peter Vlasveld Date: Wed, 14 Nov 2018 14:58:50 -0500 Subject: [PATCH] added PERM solution --- PERM.pl | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 PERM.pl diff --git a/PERM.pl b/PERM.pl new file mode 100644 index 0000000..3a02508 --- /dev/null +++ b/PERM.pl @@ -0,0 +1,60 @@ +=pod +Solution to PERM Rosalind problem +Generates permutations from 1 to n and totals them +Author: Peter Vlasveld +=cut + +#!/usr/bin/perl + +use strict; +use warnings; + +#Get number from file +open(IN, "rosalind_perm.txt") or die "Couldn't open the file"; +my $number = ; +close IN; + +#create number array +my @array = (1..$number); + +#create global variable for return array +my @finalArr = (); + +#open output file for writing +open(OUT, ">output.txt") or die "Couldn't open output file"; + +#print result of perm subroutine +print OUT perm(\@array, 0), "\n"; + +#print array of permutations +for (@finalArr){ + print OUT "@{$_}\n"; +} + +#close output file +close OUT; + +#Recursive permutation subroutine +sub perm{ + #declare sub variables + my ($arr_ref, $num) = @_; + my $count = 0; + #dereference input array + my @arr = @{$arr_ref}; + + #base case - when num = length of array + if ($num == $#arr) { + push @finalArr, \@arr; + return 1; + } + else + { + #perform a swap of num and each other number in the array, and then call the next instance of the sub + for ($num..$#arr){ + ($arr[$num], $arr[$_]) = ($arr[$_], $arr[$num]); + $count += perm(\@arr, $num+1); + } + #eventually returns number of permutations + return $count; + } +}