Guest User

Untitled

a guest
Sep 21st, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. import re
  2.  
  3. def is_valid(dna):
  4. if len(dna) < 10 or len(dna) > 100:
  5. return False
  6. reg = re.compile('^[ATGC]+$')
  7. if not reg.match(dna):
  8. return False
  9. return True
  10.  
  11. def analyze_dna(strands, codon_mapping):
  12. valid_list = []
  13. for dna in strands:
  14. if is_valid(dna):
  15. valid_list.append(dna)
  16. if len(valid_list) < 3:
  17. return ''
  18. ss = build_long_strand(valid_list)
  19. m = len(ss)
  20. if m % 3 != 0:
  21. return ''
  22. i = 0
  23. dd = {}
  24. while i < m:
  25. s = ss[i:i+3]
  26. if s not in codon_mapping:
  27. return ''
  28. if codon_mapping[s] not in dd:
  29. dd[codon_mapping[s]] = 1
  30. else:
  31. dd[codon_mapping[s]] += 1
  32. i+=3
  33. lst = [(k, v) for k, v in dd]
  34. lst.sort()
  35. for k, v in lst:
  36. res += k
  37. res += ': '
  38. res += str(v)
  39. res += '\n'
  40. res = res[:-1]
  41.  
  42. return res
  43.  
  44. def build_long_strand(valid_list):
  45. n = len(valid_list)
  46. result = []
  47. visited = [False]*n
  48. long_strand = ''
  49. if dfs_helper(n, result, visited, valid_list):
  50. long_strand = result[0]
  51. for i in range(1,len(result)):
  52. long_strand += result[i][3:]
  53. return long_strand
  54.  
  55. def dfs_helper(n, result, visited, valid_list):
  56. if n == 0:
  57. return True
  58. for i in range(len(visited)):
  59. if not visited[i]:
  60. if not result or result[-1][-3:] == valid_list[i][:3]:
  61. result.append(valid_list[i])
  62. visited[i] = True
  63. if dfs_helper(n-1, result, visited, valid_list):
  64. return True
  65. visited[i] = False
  66. result.pop(-1)
  67. return False
  68.  
  69. a = ['AGTGGGGGGGGG', 'AAACCCAATTT', 'TTTACACAGCT', 'GCTGGGCCCAGT']
  70. print(build_long_strand(a))
Add Comment
Please, Sign In to add comment