Untitled

mail@pastecode.io avatar
unknown
python
a month ago
1.2 kB
5
Indexable
Never
def solution(matrix):
    def is_valid_diagonal(x, y, dx, dy):
        cx, cy, i = x, y, 0

        # track first num is 2 or 0
        pattern = [2, 0]
        first_num = 0
        while 0 <= cx + dx < len(matrix) and 0 <= cy + dy < len(matrix[0]):
            cx += dx
            cy += dy

            if i == 0:
                first_num = pattern.index(matrix[cx][cy])

            if i % 2 == 0 and matrix[cx][cy] != pattern[first_num]:
                return False
            elif i % 2 == 1 and matrix[cx][cy] != pattern[first_num + 1 % 2]:
                return False

            i += 1

        # diagonal is valid if 2, 0 is in line
        return i > 0


    q = []
    dirs = [(1, 1), (-1, -1), (-1, 1), (1, -1)]
    diagonals = 0

    # get all initial positions of 1
    for row in range(len(matrix)):
        for col in range(len(matrix[0])):
            if matrix[row][col] == 1:
                q.append((row, col))

    # for each 1 in the matrix
    while q:
        x, y = q.pop()

        # get all diagonals at 1 starting positions
        for dx, dy in dirs:
            # count valid diagonals
            if is_valid_diagonal(x, y, dx, dy):
                diagonals += 1

    return diagonals

print(solution(matrix))
Leave a Comment