Guest User

Untitled

a guest
Mar 23rd, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. N E V
  2. N _ V
  3.  
  4. N E V
  5. N V _
  6.  
  7. N E V
  8. N _ _
  9.  
  10. N E V V V E
  11. V N _ _ N V
  12.  
  13. def align(l1, l2):
  14. S = [[0]*(len(l2)+1) for i in range(len(l1)+1)]
  15. for i in range(0, len(l1)+1):
  16. S[i][0] = {"val": ((4*(i%2))+(3*(i//2))), "skip": i%2}
  17. for j in range(0, len(l2)+1):
  18. S[0][j] = {"val": ((4*(j%2))+(3*(j//2))), "skip": j%2}
  19. for i in range(1, len(l1)+1):
  20. for j in range(1, len(l2)+1):
  21. a = (getPenalty(l1[i-1], l2[j-1]) + S[i-1][j-1]['val'])
  22. aSkip = 0
  23. b = getSkip(S[i-1][j])
  24. bSkip = S[i-1][j]['skip']
  25. c = getSkip(S[i][j-1])
  26. cSkip = S[i][j-1]['skip']
  27. val, idx = min((val, idx) for (idx, val) in enumerate([a, b, c]))
  28. newSkip = 99
  29. newVal = 0
  30. if (idx == 0):
  31. newVal = a
  32. newSkip = aSkip
  33. if (idx == 1):
  34. newVal = b
  35. newSkip = (bSkip+1)%2
  36. if (idx == 2):
  37. newVal = c
  38. newSkip = (bSkip+1)%2
  39. S[i][j] = {"val": newVal, "skip": newSkip}
  40. printArray(S)
  41. return S[-1][-1]
  42.  
  43.  
  44.  
  45. def getSkip(ar):
  46. if (ar['skip'] == 1):
  47. return ar['val']-1
  48. if (ar['skip'] == 0):
  49. return ar['val'] + 4
  50.  
  51.  
  52. def getPenalty(a, b):
  53. if (a == 'E'):
  54. if (b == 'N'):
  55. return 5
  56. if (a == 'N'):
  57. if (b == 'E'):
  58. return 5
  59. return 0
Add Comment
Please, Sign In to add comment