Forming a Magic Square

  • + 0 comments

    Python 3:

    import itertools
    from collections.abc import Iterable
    
    
    def formingMagicSquare(s: Iterable[Iterable[int]]) -> int:
        s_flat = (*itertools.chain.from_iterable(s),)
        return min(
            sum(abs(i - j) for i, j in zip(magic_square, s_flat))
            for magic_square in (
                (2, 7, 6, 9, 5, 1, 4, 3, 8),
                (2, 9, 4, 7, 5, 3, 6, 1, 8),
                (4, 3, 8, 9, 5, 1, 2, 7, 6),
                (4, 9, 2, 3, 5, 7, 8, 1, 6),
                (6, 1, 8, 7, 5, 3, 2, 9, 4),
                (6, 7, 2, 1, 5, 9, 8, 3, 4),
                (8, 1, 6, 3, 5, 7, 4, 9, 2),
                (8, 3, 4, 1, 5, 9, 6, 7, 2),
            )
        )