leetcode

Leetcode Solutions (0x6A73)
git clone https://git.pngu.org/leetcode
Log | Files | Refs | Submodules | README

largest_magic_square.py (1721B)


# 1895. Largest Magic Square

"""
a 'k x k' magic square is 'k x k' grid filled with integers such that every
row sum, every column sum, and both diagonal sums are all equal. the integers
in the magic square do not have to be distinct. every '1 x 1' grid is
trivally a magic square. given an 'm x n' integer 'grid', return the size
(ie. the side length 'k') of the largest magic square that can be found
within this grid.
"""


class Solution(object):
    def largestMagicSquare(self, grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """
        n, m, ans = len(grid), len(grid[0]), 1

        def valid(i, j, k):
            s = None
            for x in range(i, i + k):
                row = sum(grid[x][j : j + k])
                if s is None:
                    s = row
                elif s != row:
                    return False
            for y in range(j, j + k):
                if sum(grid[x][y] for x in range(i, i + k)) != s:
                    return False
            if sum(grid[i + d][j + d] for d in range(k)) != s:
                return False
            if sum(grid[i + d][j + k - 1 - d] for d in range(k)) != s:
                return False
            return True

        for k in range(2, min(n, m) + 1):
            for i in range(n - k + 1):
                for j in range(m - k + 1):
                    if valid(i, j, k):
                        ans = k
        return ans


if __name__ == "__main__":
    obj = Solution()
    print(
        obj.largestMagicSquare(
            grid=[[7, 1, 4, 5, 6], [2, 5, 1, 6, 4], [1, 5, 4, 3, 2], [1, 2, 7, 3, 4]]
        )
    )
    print(obj.largestMagicSquare(grid=[[5, 1, 3, 1], [9, 3, 3, 1], [1, 3, 3, 8]]))