added PERM solution
This commit is contained in:
		
							parent
							
								
									80bc80633c
								
							
						
					
					
						commit
						e036b2bf1e
					
				
							
								
								
									
										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
	 Peter Vlasveld
						Peter Vlasveld