Definicja
Centrosymmetric matryca jest kwadratem matrycy , która jest symetryczna względem jego środka. Bardziej rygorystycznie, macierz o rozmiarze jest centrosymetryczna, jeśli dla dowolnego spełniona jest następująca zależność: n × n i ,A i ,
Przykłady takich matryc
Oto ilustracja symetrii takich macierzy (zapożyczona z wyżej wspomnianego artykułu w Wikipedii):
Centrosymetryczna matryca o równej długości ( ):
I nieparzystej długości ( ):
Zadanie i specyfikacje
Biorąc pod uwagę kwadratową macierz wielkości co najmniej , wyprowadzaj jedną z dwóch różnych i spójnych wartości, decydując, czy macierz jest centrosymetryczna, czy nie. Możesz założyć, że macierz będzie składała się wyłącznie z dodatnich liczb całkowitych.
Jednak twój kod musi być również centrosymetryczny. Oznacza to, że musi to być program / funkcja (lub odpowiednik) składający się z wierszy, z których każdy zawiera bajtów w kodowaniu języka, i musi spełniać powyższą definicję, ale z bajtami zamiast dodatnich liczb całkowitych. Wynik twojego zgłoszenia będzie wynosił , przy czym niższy będzie lepszy.n n n
Możesz pobierać dane wejściowe i generować dane wyjściowe dowolną standardową metodą w dowolnym rozsądnym formacie, zwracając uwagę, że te luki są domyślnie zabronione. Możesz (opcjonalnie) wybrać także rozmiar , jako dane wejściowe (chyba że weźmiesz dane jako listę 1D, w którym to przypadku możesz wziąć jako dodatkowe dane wejściowe).n 2
Przypadki testowe
Prawda:
[[1, 2], [2, 1]]
[[1, 2, 3], [5, 6, 5], [3, 2, 1]]
[[10, 5, 30], [2, 6, 2], [30, 5, 10]]
[[100, 100, 100], [100, 50, 100], [100, 100, 100]]
[[1, 2, 3, 4], [5, 6, 7, 8], [8, 7, 6, 5], [4, 3, 2, 1]]
[[3, 4, 5, 6, 7], [5, 6, 7, 8, 9], [3, 2, 10, 2, 3], [9, 8, 7, 6, 5], [7, 6, 5, 4, 3]]
Falsy:
[[1, 2], [1, 2]]
[[1, 2, 10], [5, 6, 5], [11, 2, 1]]
[[14, 5, 32], [2, 6, 2], [30, 5, 16]]
[[19, 19, 19], [40, 50, 4], [19, 19, 19]]
[[1, 2, 20, 4], [7, 6, 7, 8], [8, 7, 6, 6], [3, 3, 2, 1]]
[[3, 4, 5, 6, 7], [5, 6, 7, 8, 9], [4, 5, 10, 4, 5], [5, 6, 7, 8, 9], [3, 4, 5, 6, 7]]
#
), aby cała dolna część kodu była komentarzem.#
nie będzie działał, ponieważ komentarze poprzedzone#
są tylko wstawiane: POdpowiedzi:
JavaScript (ES6), rozmiar
12119Wszystkie wersje zwracają wartość false dla centrosymmetric lub true dla niecentrosymmetric.
Tablica 1-wymiarowa + długość, rozmiar 9 (89 bajtów)
Pobiera dane wejściowe w składni curry
(length)(array)
, gdzie tablica jest jednowymiarowa.Wypróbuj online!
Matryca + szerokość, rozmiar 11 (131 bajtów)
Pobiera dane w składni curry
(width)(matrix)
.Wypróbuj online!
Ładowność
Pojemnik
Tylko macierz, rozmiar 12 (155 bajtów)
To jest moje oryginalne rozwiązanie, które samo oblicza szerokość matrycy.
Wypróbuj online!
W jaki sposób?
Potrzebujemy kilku krytycznych tokenów, których nie można podzielić:
some
length
)=>
Kanały liniowe można wstawiać prawie wszędzie.
Rozwinięty kod ładunku brzmi:
i jest zawinięty w następującą strukturę:
który po odwróceniu staje się poprawnym komentarzem do bloku:
źródło
Galaretka , ocena 2
Wypróbuj online!
Pobiera dane wejściowe jako spłaszczoną macierz kwadratową (wektor wielkości ).n2
źródło
Befunge-93 , rozmiar 24
Wypróbuj online!
Dane wejściowe:,
n
po których następują elementy tablicy, wszystkie oddzielone spacjami. UWAGA: może być konieczne użycie innego tłumacza, jeśli masz wystarczająco duży wkład.Jestem pewien, że jest na to lepszy sposób, chciałem tylko wypróbować to w Befunge. Rzeczywista część kodu to górna połowa.
W jaki sposób?
Kod podzielony jest na dwie główne sekcje: inicjalizację i weryfikację .
Inicjalizacja:
Ta sekcja kodu zapisuje macierz wprowadzania bezpośrednio pod kodem jako znaki ASCII. Zarówno ta, jak i następna sekcja wykorzystują trzy komórki w lewym górnym rogu kodu jako dane. Są przechowywane jako
n, i, j
.Weryfikacja:
W tej sekcji sprawdza się każdy indeks [1-indeksowany] pod warunku . Mamy jednak problem: mamy przesunięcie o . Aby to naprawić, stosuje się następujące formuły:A i , j = A n + 1 - i , n + 1 - j j 8i,j Ai,j=An+1−i,n+1−j j 8
Pozostałe części kodu to nieprzeczytane śmieci, dzięki czemu są one centrosymetryczne.
źródło
Bez komentarza!
Pobiera dane wejściowe jako listę 1-D
Wypróbuj online!
Pobiera dane wejściowe jako matrycę 2-D
Wypróbuj online!
Podziękowania dla potato44 za całą ich pomoc na czacie. I Lynn za grę w golfa z rzędu.
Wyjaśnienie
Ogólny pomysł tutaj jest prosty, my
concat
listę i porównajmy to do tyłu. Ponieważ jednak chcemy być centrosymetryczni, musimy ostrożnie podążać. Najpierw piszemy kod w normalny sposób:Teraz, aby nasze odwrotne linie również były poprawne, Haskell, potrzebujemy lewej strony naszych równań, aby wyglądały, jakby definicja funkcji
tacnoc.)esrever>*<)==((
nie.Pierwszym krokiem do rozwiązania tego jest usunięcie nawiasów.
Mamy jednak teraz kilka nowych problemów. Oba
.
i==
po odwróceniu są takie same, więc nasze odwrócone linie próbują na nowo zdefiniować operatory (<*>
odwrócone jest>*<
więc w porządku, jeśli chodzi o ten front)..
można zastąpić,<$>
ponieważ funkcje są funktorami. I możemy wymienić==
się/=
, co neguje nasze wyjście, ale to jest wciąż w specyfikacji. Teraz mamyAby skrócić naszą długość linii, mamy alias
concat
ireverse
.Teraz kończymy to, czyniąc wszystko centrosymetrycznym i kwadratowym.
Krótsza wersja 1-D działa w ten sam sposób, z wyjątkiem tego, że nie
concat
musimy zapisywać dwóch linii, usuwając ją.źródło
<$>
było też odwrotnie<$>
.Python 2 , rozmiar 10 (109 bajtów)
Wypróbuj online!
Poprzedni Python 2 , rozmiar 14 (209 bajtów)
Wypróbuj online!
źródło
-i-1
i-j-1
może po prostu być~i
i~j
Pyth, rozmiar 6 (41 bajtów)
Wypróbuj tutaj
Wyjaśnienie
Pierwszy wiersz odwraca dane wejściowe i każdy wiersz i sprawdza, czy pozostała nam kopia danych wejściowych. W drugiej linii zamyka program, więc wszystko po tym, jak również przed nim, to nie-op.
.q
q
źródło
APL (Dyalog Unicode) , wynik
7654Pełny program Monity o wyrażenie macierzy ze standardowego wejścia. Drukuje 1 lub 0, a następnie zgłasza spójny błąd. Bez komentarza!
Wypróbuj online!
⎕
monituj o wyrażenie i oceń go,
ravel (spłaszcz)r←
zapisz wynikr
(dla r avelled)⌽r
r
r≡
kopia lustrzana domyślnie drukuje, czyr
jest identyczna≡
głębokośćr
(daje 1)r⌽
użycier
do obrócenia tego(to zawsze spowoduje a
RANK ERROR
i wyjście, ponieważ macierz nie jest dozwolona jako lewy argument⌽
)źródło
Perl 6 , rozmiar
9 87Wypróbuj online!
Okej, zmieniłem nareverse
jest tutaj wąskie gardło. Zmieniłem to na technicznie dłuższe, ale o wiele bardziej podzielne[*-1 X-^*]
.[R,]
po obejrzeniu odpowiedzi Brada Gilberta na inne pytanie.Spłaszczony kod to
{.flat eq [R,] .flat}
.Edycja: Cholera, zdałem sobie sprawę, że nawet nie muszę spłaszczać pierwszej listy, ale próby skrócenia jej do rozmiaru 6 nie powiodły się z zaledwie jednym bajtem za dużo, by zmieścić ...
:(
Chociaż, jeśli weźmiemy to za jednowymiarowy układ, łatwo jest zmieścić go w rozmiarze 6.
Wypróbuj online!
źródło
Wolfram Language (Mathematica) (tylko REPL), rozmiar 8 (71 bajtów)
Zwraca
True
dane wejściowe centrosymetryczne iFalse
inne.W Mathematica REPL linie z błędami składniowymi są ignorowane (z grubym czerwonym paskiem pojawiającym się z boku ekranu). Tutaj
f=#[[c=-1;;1;;-1,c]]==#&
wykonywane są tylko trzy pierwsze wiersze .Ten kod przechwytuje funkcję w nazwie
f
.Niestety wbudowany
PalindromeQ
jest za długi.źródło
Pyt , rozmiar 1
Wypróbuj online!
Sprawdza, czy dane wejściowe (w postaci połączonych wierszy) są palindromem.
źródło
Japt , rozmiar
94 (11 bajtów)Wypróbuj online!
Pobiera jednowymiarowe dane wejściowe, sprawdza, czy jest to palindrom. Jeśli chcesz, możesz wypełnić dwie puste linie dla sztuki ascii.
Stara dwuwymiarowa wersja dwukrotnie obraca wejście i sprawdza, czy jest ono równe oryginałowi:
Wypróbuj online!
źródło
Łuska , rozmiar 3
Wypróbuj online! Wprowadź jako listę 1D. Każda linia definiuje funkcję, ale wywoływana jest tylko ta w pierwszym wierszu.
Ṡ=↔
to test palindromu, który sprawdza, czy dane wejściowe są równe (=
) jego odwrotności (↔
).Łuska , rozmiar 4
Wypróbuj online! W przypadku danych wejściowych w postaci macierzy 2D konkatenujemy (
Σ
) listę list przed sprawdzeniem, czy jest to palindrom.źródło
MATL , wynik 4
Dane wejściowe mają format
[1 2; 2 1]
wykorzystujący;
jako separator wierszy.Wyjście odbywa się za pośrednictwem STDERR ( domyślnie dozwolone ):
W przypadku wprowadzania centrosymetrycznego generowany jest stały błąd błędu. Przy obecnych wersjach Linux i Octave w TIO generowane są następujące dane wyjściowe STDERR (bez względu na ostatnie wiersze, które zaczynają się od
Real time: ...
):Błąd może być różny w zależności od wersji Linux i Octave, ale będzie spójny we wszystkich wejściach.
W przypadku danych niecentrosymetrycznych nie występuje błąd, a wyjście STDERR w TIO wynosi
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe:
Sprawdź , czy program jest centrosymetryczny.
Wyjaśnienie
%
to symbol komentarza, który powoduje ignorowanie reszty wiersza. Nowe linie są również ignorowane. Więc kod jest po prostuktóry wykonuje następujące czynności:
źródło
Haskell, rozmiar
11,10,9, 8Pobiera dane wejściowe jako listę 2D! (Podziękowania dla Ørjan Johansen)
źródło
<*>
powinno być>*<
. W 2D brakuje brakuje,-
a odwrócona część nie ma spacji we właściwych miejscach.Python 2 , rozmiar 8
Wypróbuj online!
Lista jest po prostu sprawdzana jako palindrom. Jeśli tak, łańcuch porównawczy
a[::-1]!=a<_
zawodzi na!=
etapie i powoduje zwarcie; w przeciwnym razie nieznana zmienna_
zostanie poddana ocenie, powodując awarię programu.źródło
R , rozmiar 9
Wypróbuj online!
Ostatnie trzy wiersze to rzeczywisty program, który pobiera tablicę 1D jako dane wejściowe i sprawdza, czy jest ona równa odwrotności. Prawda: FALSE, Wartość Falsy: PRAWDA.
R + pryr, rozmiar 9
Wypróbuj online!
źródło
C # (.NET Core) , wynik
13 1110Wypróbuj online!
Pobiera dane wejściowe jako tablicę 1D, a n 2 jako długość; zwraca
false
dla centrosymetrycznego itrue
dla niecentrosymetrycznego. Ta wersja używa,System.Linq
ale nie wiem, jak dopasować ją do kodu, ze względu na szczególne wymagania wyzwania. Kod rozwinięty:Oto moje poprzednie zgłoszenie, które nie korzysta z LINQ:
C # (.NET Core) , wynik
16 1513Wypróbuj online!
Kod rozwinięty:
źródło
int
navar
(a więc równieżtni
narav
), drugie przesłanie działa również w JavaScript.Ruby , zdobądź
98Wypróbuj online!
Lambda przyjmująca spłaszczoną macierz jako dane wejściowe. Zwraca true dla centrosymmetric, false w przeciwnym razie.
-1 dzięki Mr.XCoder,
Rozpakowane:
źródło
Czysty , rozmiar 9
Dzięki Ørjan Johansen !
Wypróbuj online!
Czysty , rozmiar 10
Wypróbuj online!
źródło
m
.05AB1E , rozmiar 3 (11 bajtów )
Wprowadź jako pojedynczą listę.
Wypróbuj online.
Myślę, że to się nie liczy ...; str
Wprowadź jako pojedynczą listę.
Wypróbuj online.
Wyjaśnienie:
Niektóre alternatywy rozmiaru 3 (11 bajtów ):
Matryca jako dane wejściowe.
Wypróbuj online.
Pojedyncza lista jako dane wejściowe.
Wypróbuj online.
źródło
C (gcc) , 12 x 12
Wypróbuj online!
źródło
> <>, Rozmiar 6
Wypróbuj online!
(Okazuje się, że ból powoduje wielokrotne przekazywanie wartości do -v in tio)
Dane wejściowe są traktowane jako jednowymiarowa tablica jako początkowy stan stosu z -v. Wychodzi bez wyjścia, jeśli matryca jest centrosymetryczna, wychodzi z błędem (wypisuje „Coś pachnie rybim ...”), jeśli nie.
Nie byłem do końca zadowolony z tego formatu wyjściowego, więc oto rozmiar 7, który daje 1 dla wartości true i 0 dla wartości false.
Wypróbuj online!
źródło
{-?;
Stax , n = 3
Uruchom i debuguj
Wyjaśnienie:
3 jest najlepszym możliwym, ponieważ potrzebuję co najmniej trzech poleceń: Kopiuj, odwróć i porównaj
Stax , n = 4
Uruchom i debuguj
Wyjaśnienie:
źródło
Japt , rozmiar 2 (5 bajtów)
Spróbuj
źródło
Java 10, rozmiar 13 (181 bajtów)
Wypróbuj online.
Zainspirowany odpowiedzią C # @Charlie .
Wyjaśnienie w golfa:
źródło
C (gcc) , wynik 11
Pobiera listę liczb int i n jako argumentów. Zwraca n jako wartość prawdy, 0 jako fałsz.
Wypróbuj online!
źródło
JavaScript ES6, rozmiar 8:
JavaScript ES6, rozmiar 7 (czy jest poprawny?):
Test:
lub z zapisem lambda w zmiennej o nazwie
a
:źródło
Clojure, rozmiar 9
Wypróbuj online!
źródło