Magiczne kwadrat jest kwadratem tablicę liczb z boku n składający się z oddzielnych dodatnich liczb 1, 2, ..., n ² usytuowane tak, że suma n ilościach w każdym poziomym, pionowym, albo głównego przekątnej jest zawsze ta sama liczba, znana jako stała magiczna.
Twój program musi wprowadzić, poprzez standardowe wejście, liczbę określającą długość boku kwadratu, a następnie liczby w kwadracie. Żadne liczby nie mogą być użyte więcej niż jeden raz, żadna liczba większa niż n ² nie może być użyta, a wszystkie liczby muszą być większe niż 0. Program musi ustalić, czy ta kombinacja liczb jest magicznym kwadratem.
(i,j)
efektywniej zakodować parę jako jedną liczbęx
, biorąci=x%C
ij=x/C
dla niektórych wystarczająco dużychC
. Może spróbuję później.APL, 35
Objaśnienie
x←⎕⍴⍨,⍨⎕
monituje o wprowadzenie danych, ukształtowanie ich w macierz i przypisanie dox
⌽
Odwraca macierz od lewej do prawejx(...)
Utwórz tablicę macierzy:x
ix
odwróć1 1∘⍉¨
Dla każdej z tych macierzy weź przekątną+/↑
2 × n macierzy liczb na tych przekątne i zsumuj rzędy⍉x
Transponuj,x
x,
a następnie połącz z,x
aby utworzyć macierz × 2n+⌿
i zsumuj kolumny(+⌿x,⍉x),+/↑1 1∘⍉¨x(⌽x←⎕⍴⍨,⍨⎕)
konkatenuj, aby utworzyć tablicę sum,2=/
sprawdź, czy kolejne pary są równe∧/
i ORAZ razem wszystkie te wynikiźródło
Mathematica
128125Pobiera dane wejściowe, takie jak
źródło
Input[r=Reverse]
aby zapisać bajt.#&@@
jest bajtem krótszym niż[[1]]
. Prawdopodobnie możesz dodatkowo użyć notacji infixPartition
dla innego bajtu. IThread
powinien działać zamiastTranspose
. Alternatywnie, użyj tego znaku Unicode jako operatora post fix (Mathematica używa go dla indeksu górnego T do transpozycji).APL
4732Korzystając z doskonałego rozwiązania TwiNight i wprowadzając dodatkowe poprawki:
Wyjaśnienie:
Wykorzystuje to ciągi funkcji, które zostały wprowadzone w wersji 14 interpretera Dyalog. APL jest wykonywany od prawej do lewej, ⎕ są wejściami, więc najpierw wymiary, a następnie wektor liczb.
⎕⍴⍨, ⍨⎕ tworzy macierz NxN
Potem następuje ciąg funkcji, które są w zasadzie sekwencją funkcji (między nawiasami) zastosowanych do właściwego argumentu. Funkcje to:
⊢ Zwraca właściwy argument (czyli macierz)
Oses Transponuje właściwą macierz argumentów
1 1∘⍉ Zwraca przekątną
1 1∘⍉∘⌽ Zwraca przekątną odwróconej (poziomo) macierzy
Wszystkie wyniki są łączone z funkcją „,”
W tym momencie wynikiem jest macierz, której kolumny są następnie sumowane (+ ⌿). Uzyskane w ten sposób wartości są następnie sprawdzane, aby były takie same przy ∧ / 2 = /
Zostawię tu również moje stare rozwiązanie:
przyjmuje wymiar jako lewy argument, wektor elementów jako prawy argument, na przykład:
Można wypróbować online tutaj: www.tryapl.org
źródło
GolfScript 67 ( wersja demonstracyjna )
źródło
JavaScript (E6) 194
Za pomocą zachęty do odczytu danych wejściowych i wyjściowych.
Test w konsoli z FireFox> 31 (Array.fill jest bardzo nowy)
Mniej golfa
źródło
Pyth,
2430 bajtówWypróbuj online tutaj .
Edycja: naprawiono błąd, dzięki @KevinCruijssen za poinformowanie mnie o: o)
źródło
True
magiczne kwadraty z liczbami, które są zbyt duże lub nie wszystkie są unikalne. Ie4
i[12,26,23,13,21,15,18,20,17,19,22,16,24,14,11,25]
lub4
i[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
wyjście zarównoTrue
. (Prawie wszystkie istniejące odpowiedzi mają ten sam problem, ale ponieważ zostały opublikowane ponad 4 lata temu, nie zadałem sobie trudu, aby poprawić swoje błędy w komentarzu.)LUA 186 znaków
źródło
05AB1E , 24 bajty
Format wejściowy:
4\n[2,16,13,3,11,5,8,10,7,9,12,6,14,4,1,15]
. Wyjścia1
/ odpowiednio0
dla truey / falsey.Wypróbuj online lub sprawdź więcej przypadków testowych .
Wyjaśnienie:
źródło