From a9d956cfff5de8db52d8d343c58b211ca3dc267c Mon Sep 17 00:00:00 2001 From: Peter Vlasveld Date: Fri, 18 Jan 2019 17:55:27 -0500 Subject: [PATCH] added LGIS solution --- LGIS.py | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 LGIS.py diff --git a/LGIS.py b/LGIS.py new file mode 100644 index 0000000..532104c --- /dev/null +++ b/LGIS.py @@ -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() \ No newline at end of file