У меня есть случайный массив 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]],
]
Но я не хочу сравнивать входную матрицу с каждым случаем в списке, чтобы проверить, достаточно ли он близок или нет.