Преобразование случайной матрицы 3х3 в магический квадрат 3х3 - PullRequest
0 голосов
/ 06 июля 2019

У меня есть случайный массив 3х3, состоящий из чисел от 1 до 9 (повторы разрешены).Есть ли эффективный способ сравнения этого массива с ближайшим магическим квадратом 1-9 3x3?

Я думал о грубом форсировании, перечисляя все комбинации магических квадратов (8 из них), но это очень не элегантно.Я ищу что-то более оптимальное.

Допустим, у меня есть матрица 3x3

4 3 8
9 6 1
3 7 6

Существует магический квадрат

4 3 8
9 5 1
2 7 6

Только средний элемент инижний левый элемент должен быть изменен (по наименьшему возможному значению) в исходной матрице, чтобы получить магический квадрат.

Единственными возможными комбинациями магических квадратов 3x3 являются

all_squares = [
            [[8, 1, 6, 3, 5, 7, 4, 9, 2]],
            [[6, 1, 8, 7, 5, 3, 2, 9, 4]],
            [[4, 9, 2, 3, 5, 7, 8, 1, 6]],
            [[2, 9, 4, 7, 5, 3, 6, 1, 8]], 
            [[8, 3, 4, 1, 5, 9, 6, 7, 2]],
            [[4, 3, 8, 9, 5, 1, 2, 7, 6]], 
            [[6, 7, 2, 1, 5, 9, 8, 3, 4]], 
            [[2, 7, 6, 9, 5, 1, 4, 3, 8]],
            ]

Но я не хочу сравнивать входную матрицу с каждым случаем в списке, чтобы проверить, достаточно ли он близок или нет.

...