# L-3 MCS 275 Fri 13 Jan 2017 : findmin.py
"""
Finds the minimum in a matrix, represented as
a list of rows, where each row is an array.
"""

def findmin(matrix):
    """
    Returns the row and the column indices
    of the minimum element in the matrix.
    """
    (row, col) = (0, 0)
    val = matrix[row][col]
    for i in range(0, len(matrix)):
        nbcols = matrix[i].buffer_info()[1]
        for j in range(0, nbcols):
            if matrix[i][j] < val:
                (row, col) = (i, j)
            val = matrix[row][col]
    return (row, col)

def test():
    """
    Tests the findmin on the values on a paraboloid.
    """
    from array import array
    paraboloid = lambda x, y: (x-5)**2+(y-5)**2
    data = [array('b', [paraboloid(i, j) \
        for i in range(10)]) \
        for j in range(10)]
    print('looking for a minimum in ')
    for row in data:
        print(row)
    (i, j) = findmin(data)
    print('minimum value %d occurs at (%d, %d)' \
        % (data[i][j], i, j))

if __name__ == "__main__":
    test()
