added LGIS solution
This commit is contained in:
		
							parent
							
								
									5593b9353c
								
							
						
					
					
						commit
						a9d956cfff
					
				
							
								
								
									
										70
									
								
								LGIS.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								LGIS.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,70 @@ | |||||||
|  | #!/usr/bin/python | ||||||
|  | 
 | ||||||
|  | # Solution to the LGIS Rosalind Problem - Longest Increasing Subsequence | ||||||
|  | # Author: Peter Vlasveld | ||||||
|  | # Date: 18/01/2019 | ||||||
|  | import copy | ||||||
|  | 
 | ||||||
|  | #get input | ||||||
|  | f1 = open("rosalind_lgis.txt") | ||||||
|  | content = f1.readlines() | ||||||
|  | f1.close() | ||||||
|  | 
 | ||||||
|  | #get array out of content | ||||||
|  | arr = content[1].split( ) | ||||||
|  | 
 | ||||||
|  | #function to find longest increasing subsequence of arr | ||||||
|  | def inc (arr): | ||||||
|  |     #set s array to a list of a list of the first value in arr | ||||||
|  |     s = [[arr[0]]] | ||||||
|  |     #loop through arr skipping the first value | ||||||
|  |     for i in xrange(1,len(arr)): | ||||||
|  |         #if this arr value is greater than the last element in the last list of s,  | ||||||
|  |         # then duplicate the last list and append the new value | ||||||
|  |         if int(arr[i]) > int(s[len(s)-1][len(s[len(s)-1])-1]): | ||||||
|  |             tempLis = copy.deepcopy(s[len(s)-1]) | ||||||
|  |             tempLis.append(arr[i]) | ||||||
|  |             s.append(tempLis) | ||||||
|  |         #else if the first list of s is greater than the arr value, make the arr value the new first list | ||||||
|  |         elif int(s[0][0]) > int(arr[i]): | ||||||
|  |             s[0] = copy.deepcopy([arr[i]]) | ||||||
|  |         #otherwise, find the list in s where the last value is less greater than the arr value, | ||||||
|  |         # and replace it with the list before it, with the new value appended to the end | ||||||
|  |         else: | ||||||
|  |             for j in xrange(0, len(s)): | ||||||
|  |                 if int(arr[i]) < int(s[j][len(s[j])-1]): | ||||||
|  |                     s[j] = copy.deepcopy(s[j-1]) | ||||||
|  |                     s[j].append(arr[i]) | ||||||
|  |                     break | ||||||
|  |     #return the last element of s which at this point is the longest increasing subsequence | ||||||
|  |     return s[len(s)-1] | ||||||
|  | 
 | ||||||
|  | #find the longest decreasing subsequence | ||||||
|  | #the logic is the exact same as the above increasing function,  | ||||||
|  | # just with all of the greater-than and less-than operators turned around | ||||||
|  | def dec (arr): | ||||||
|  |     s = [[arr[0]]] | ||||||
|  |     for i in xrange(1,len(arr)): | ||||||
|  |         if int(arr[i]) < int(s[len(s)-1][len(s[len(s)-1])-1]): | ||||||
|  |             tempLis = copy.deepcopy(s[len(s)-1]) | ||||||
|  |             tempLis.append(arr[i]) | ||||||
|  |             s.append(tempLis) | ||||||
|  |         elif int(s[0][0]) < int(arr[i]): | ||||||
|  |             s[0] = copy.deepcopy([arr[i]]) | ||||||
|  |         else: | ||||||
|  |             for j in xrange(0, len(s)): | ||||||
|  |                 if int(arr[i]) > int(s[j][len(s[j])-1]): | ||||||
|  |                     s[j] = copy.deepcopy(s[j-1]) | ||||||
|  |                     s[j].append(arr[i]) | ||||||
|  |                     break | ||||||
|  |     return s[len(s)-1] | ||||||
|  | 
 | ||||||
|  | #run the functions | ||||||
|  | inc = inc(arr) | ||||||
|  | dec = dec(arr) | ||||||
|  | 
 | ||||||
|  | #print the output to a file | ||||||
|  | f2 = open("output.txt", "w") | ||||||
|  | f2.write(" ".join(inc) + "\n") | ||||||
|  | f2.write(" ".join(dec)) | ||||||
|  | f2.close()  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Peter Vlasveld
						Peter Vlasveld