Merge branch 'master' of https://github.com/Fizzizist/rosalind-solutions
This commit is contained in:
commit
96c59030ff
60
PERM.pl
Normal file
60
PERM.pl
Normal file
@ -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 = <IN>;
|
||||
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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user