Магический квадрат представляет собой н-с-п квадратной сетку, наполненный различными положительными целые числа в диапазоне от 1,2, ... п ^ 2 , таким образом, что каждая ячейка содержит различное число и сумму целых чисел в каждой строке, столбец и диагональ равны.
Ваша задача - взять матрицу n-на-n, состоящую из положительных чисел и символа-заполнителя для пустых ячеек (я буду использовать 0 , но вы можете использовать любой нечисловой символ или тип данных, который вам нравится), и определить, является ли он можно сделать магический квадрат, заполнив пропущенные числа
Матрица будет как минимум 2 на 2 , и максимум 10 на 10 . Наименьший возможный нетривиальный магический квадрат - 3 на 3 . Числа во входной матрице могут быть больше, чем n ^ 2 , и возможно, что все ячейки заполнены.
Тестовые случаи:
2 2
2 0
False
8 0 6
0 5 0
0 9 2
True
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
True
10 0 1
0 5 9
3 7 5
False
99 40 74 8 15 51 0 67 0 1
0 41 55 14 0 57 64 0 98 0
81 47 56 20 22 63 70 54 0 88
0 28 0 21 0 69 71 60 85 19
0 34 0 2 9 75 52 61 0 25
24 65 49 0 90 26 33 42 17 76
0 0 30 89 91 0 39 48 0 82
6 72 31 95 0 38 45 29 0 13
12 53 0 96 78 0 0 0 10 94
18 59 43 77 0 0 27 36 0 100
True
[ [ 1, 5, 9 ], [ 6, 7, 2 ], [ 8, 3, 4 ] ]
(ложь)[[8, X1, 6], [X2, 5, X3], [X4, 9, 2]]
)?Ответы:
JavaScript (ES6),
270268 байтПринимает матрицу как двумерный массив. Возвращает
0
или1
.Контрольные примеры
Это определенно слишком медленно для последнего теста. :-(
Показать фрагмент кода
источник
05AB1E , 45 байт
Также использует качестве заполнителя. Чем больше с (или число выше ) на входе, тем медленнее программа. Размер матрицы не имеет большого значения (матрица 10x10 с тремя с работает намного быстрее, чем матрица 3x3 с семью с).0 0 N2 0 0
Может быть на 4 байта меньше, но в настоящее время есть ошибка во встроенном
.;
с 2D списками.:
и.:
работать как положено, но сейчас.;
ничего не делает с 2D-списками ... отсюда обходной путь˜
и¹gô
выравнивание матрицы; использовать.;
в списке; и преобразовать его обратно в матрицу снова.Попробуйте онлайн или проверьте еще несколько тестов . (ПРИМЕЧАНИЕ. Последний контрольный пример описания вызова не включен, поскольку он содержит слишком много нулей ...)
Объяснение:
Часть
©O®øO®Å\O®Å/O)˜Ë
также используется в моем 05AB1E ответ на Verify Magic Square вызов , поэтому видим , что ответ на более подробные разъяснения о той части кода.источник