def matrixaddition(A, B): (l, c) = (len(A), len(A[0])) if (l, c) != (len(B), len(B[0])): raise Exception("Matrices have not same dimensions") M = matrix.init(l, c, 0) for i in range(l): for j in range(c): M[i][j] = A[i][j] + B[i][j] return M
def matrixproduct(A, B): m = len(A) n = len(A[0]) if n != len(B): raise Exception("Incompatible dimensions") p = len(B[0]) M = matrix.init(m, p, 0) for i in range(m): for j in range(p): for k in range(n): M[i][j] = M[i][j] + A[i][k] * B[k][j] return M
def buildMaxMat(T): l = len(T) c = len(T[0]) M = matrix.init(l, c, 0) for j in range(c): M[0][j] = T[0][j] for i in range(1, l): #FIXME pass return M
def buildMaxMat(T): l = len(T) c = len(T[0]) M = matrix.init(l, c, 0) for j in range(c): M[0][j] = T[0][j] for i in range(1, l): M[i][0] = T[i][0] + max(M[i-1][0], M[i-1][1]) for j in range(1, c-1): M[i][j] = T[i][j] + max(M[i-1][j-1], M[i-1][j], M[i-1][j+1]) M[i][c-1] = T[i][c-1] + max(M[i-1][c-2], M[i-1][c-1]) return M
def Siamise(n): """ builds a magic square of n-odd size starts in the middle of last line, then going SE """ S = matrix.init(n, n, 0) i = n - 1 j = n // 2 S[i][j] = 1 for k in range(2, n * n + 1): i2 = (i + 1) % n j2 = (j + 1) % n if S[i2][j2] == 0: (i, j) = (i2, j2) else: i = i - 1 if i == -1: i = n - 1 S[i][j] = k return S