Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- N E V
- N _ V
- N E V
- N V _
- N E V
- N _ _
- N E V V V E
- V N _ _ N V
- def align(l1, l2):
- S = [[0]*(len(l2)+1) for i in range(len(l1)+1)]
- for i in range(0, len(l1)+1):
- S[i][0] = {"val": ((4*(i%2))+(3*(i//2))), "skip": i%2}
- for j in range(0, len(l2)+1):
- S[0][j] = {"val": ((4*(j%2))+(3*(j//2))), "skip": j%2}
- for i in range(1, len(l1)+1):
- for j in range(1, len(l2)+1):
- a = (getPenalty(l1[i-1], l2[j-1]) + S[i-1][j-1]['val'])
- aSkip = 0
- b = getSkip(S[i-1][j])
- bSkip = S[i-1][j]['skip']
- c = getSkip(S[i][j-1])
- cSkip = S[i][j-1]['skip']
- val, idx = min((val, idx) for (idx, val) in enumerate([a, b, c]))
- newSkip = 99
- newVal = 0
- if (idx == 0):
- newVal = a
- newSkip = aSkip
- if (idx == 1):
- newVal = b
- newSkip = (bSkip+1)%2
- if (idx == 2):
- newVal = c
- newSkip = (bSkip+1)%2
- S[i][j] = {"val": newVal, "skip": newSkip}
- printArray(S)
- return S[-1][-1]
- def getSkip(ar):
- if (ar['skip'] == 1):
- return ar['val']-1
- if (ar['skip'] == 0):
- return ar['val'] + 4
- def getPenalty(a, b):
- if (a == 'E'):
- if (b == 'N'):
- return 5
- if (a == 'N'):
- if (b == 'E'):
- return 5
- return 0
Add Comment
Please, Sign In to add comment