Forming a Magic Square

  • + 0 comments

    Python3 2 line:

    def formingMagicSquare(s):
        # base = (
        #     (8,3,4),
        #     (1,5,9),
        #     (6,7,2))
        # def v(m):
        #     return m[::-1]
        # def r(m):
        #     return tuple(r[::-1] for r in zip(*m))
        # M = [base]
        # for _ in range(3):
        #     M.append(r(M[-1]))
        # M.append(v(base))
        # for _ in range(3):
        #     M.append(r(M[-1]))
        # for m in M:
        #     print(m)
        
        M = (
            ((8, 3, 4), (1, 5, 9), (6, 7, 2)),
            ((6, 1, 8), (7, 5, 3), (2, 9, 4)),
            ((2, 7, 6), (9, 5, 1), (4, 3, 8)),
            ((4, 9, 2), (3, 5, 7), (8, 1, 6)),
            ((6, 7, 2), (1, 5, 9), (8, 3, 4)),
            ((8, 1, 6), (3, 5, 7), (4, 9, 2)),
            ((4, 3, 8), (9, 5, 1), (2, 7, 6)),
            ((2, 9, 4), (7, 5, 3), (6, 1, 8))
        )
        
        return min(sum(abs(m[i][j] - s[i][j]) for i in range(3) for j in range(3)) for m in M)