Magiczne kwadrat jest n-o-n kwadratowy siatkę, wypełnione różnych dodatnie liczby całkowite w zakresie od 1,2, ... n ^ 2 , tak, że każda komórka zawiera inna liczbę całkowitą, a suma liczb całkowitych w każdym rzędzie kolumna i przekątna są równe.
Twoim zadaniem jest pobranie macierzy n-na-n składającej się z liczb dodatnich i znaku zastępczego dla pustych komórek (użyję 0 , ale możesz użyć dowolnego nieliczbowego znaku lub typu danych, który lubisz) i ustal, czy jest to można zrobić magiczny kwadrat, wypełniając brakujące liczby
Matryca będzie mieć wymiary co najmniej 2 na 2 , a co najwyżej 10 na 10 . Najmniejszy możliwy nietrywialny magiczny kwadrat to 3 na 3 . Liczby w macierzy wejściowej mogą być wyższe niż n ^ 2 i możliwe jest, że wszystkie komórki są wypełnione.
Przypadki testowe:
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 ] ]
(fałsz)[[8, X1, 6], [X2, 5, X3], [X4, 9, 2]]
)?Odpowiedzi:
JavaScript (ES6),
270268 bajtówPrzyjmuje macierz jako tablicę 2D. Zwraca
0
lub1
.Przypadki testowe
Jest to zdecydowanie zbyt wolne w przypadku ostatniego przypadku testowego. :-(
Pokaż fragment kodu
źródło
05AB1E , 45 bajtów
Używa również0 0 n2) 0 0
Mógł być o 4 bajty mniej, ale obecnie jest wbudowany błąd
.;
z listami 2D.:
i.:
działa zgodnie z oczekiwaniami, ale w.;
tej chwili nie robi nic na listach 2D. Stąd obejście˜
i¹gô
spłaszczenie matrycy; użyj.;
na liście; i ponownie przekształć go w macierz.Wypróbuj online lub sprawdź kilka innych przypadków testowych . (UWAGA: Ostatni przypadek testowy opisu wyzwania nie jest uwzględniony, ponieważ ma zbyt wiele zer.)
Wyjaśnienie:
Część
©O®øO®Å\O®Å/O)˜Ë
jest również używana w mojej odpowiedzi 05AB1E na wyzwanie Verify Magic Square , więc zobacz tę odpowiedź, aby uzyskać bardziej szczegółowe wyjaśnienie na temat tej części kodu.źródło