Ist die Matrix zentrosymmetrisch ... und der Code auch?

37

Definition

Eine zentrosymmetrische Matrix ist eine quadratische Matrix , die um ihr Zentrum symmetrisch ist. Strenger ist eine Matrix der Größe zentrosymmetrisch, wenn für jedes die folgende Beziehung erfüllt ist: n × n i ,An×nA i ,i,j([1,n]Z)

Ai,j=An+1i,n+1j

Beispiele für solche Matrizen

Hier ist ein Beispiel für die Symmetrie von Matrizen wie diesen (aus dem oben genannten Wikipedia-Artikel entlehnt):

Die zentrosymmetrische 5-mal-5-Matrix ist sehr schön dargestellt

Eine zentrosymmetrische Matrix mit gerader Seitenlänge ( ):4×4

(1234567887654321)

Und eine ungerade Seitenlänge ( ):3×3

(123565321)

Aufgabe und Spezifikationen

Bei einer quadratischen Matrix mit einer Größe von mindestens wird einer von zwei unterschiedlichen und konsistenten Werten ausgegeben, wobei entschieden wird, ob die Matrix zentrosymmetrisch ist oder nicht. Sie können davon ausgehen, dass die Matrix vollständig aus positiven ganzen Zahlen besteht.2

Ihr Code muss jedoch auch zentrosymmetrisch sein. Das heißt, es muss ein Programm / eine Funktion (oder Äquivalente) sein, die aus Zeilen besteht, von denen jede Bytes in der Codierung Ihrer Sprache enthält, und der oben angegebenen Definition entsprechen muss, jedoch mit Bytes anstelle positiver Ganzzahlen. Die Bewertung Ihrer Einreichung ist der Wert von , wobei ein niedrigeres besser ist.n n nnn nn

Sie können Eingaben und Ausgaben mit jeder Standardmethode und in jedem vernünftigen Format vornehmen, wobei zu beachten ist, dass diese Lücken standardmäßig verboten sind. Sie können (optional) auch die Größe als Eingabe verwenden (es sei denn, Sie verwenden die Eingabe als 1D-Liste. In diesem Fall können Sie nur als zusätzliche Eingabe verwenden).n 2nn2

Testfälle

Wahrheit:

[[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]]

Falsch:

[[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]]
Mr. Xcoder
quelle
1
Hmm, das sieht für nicht-golfende Sprachen immer noch ziemlich schwierig aus, weil es Klammern und Klammern ohne Kommentare bricht. Ein naiver Ansatz wäre, jede Zeile mit einem Kommentarzeichen (wie Pythons #) zu beenden , sodass die untere Hälfte des Codes ein Kommentar wäre.
JungHwan Min
@JungHwanMin In diesem speziellen Fall #funktioniert Python nicht, da die vorangestellten Kommentare #nur inline sind: P
Mr. Xcoder
1
Mögliches Duplikat von Ich bin ein Palindrom. Bist du?
Pavel
6
Ich denke, ich werde nur darum bitten, mich zu unterscheiden, da die Einschränkungen der Quelle die Dinge ziemlich verändern und das Gewinnkriterium anders ist. Meiner Meinung nach reichen diese Unterschiede aus. Außerdem gibt es andere Techniken (in vielen Sprachen kürzere - z. B. Mathematica), die anstelle von Abflachen + Palindromprüfung verwendet werden können.
Mr. Xcoder
1
@WW Kurz gesagt, um die Herausforderung einfach zu halten und unerwünschte Randfälle zu vermeiden. Außerdem ist es für mich intuitiver, es quadratisch zu halten.
Mr. Xcoder

Antworten:

21

JavaScript (ES6), Größe 12 11 9

Alle Versionen geben false für zentrosymmetrisch oder true für nicht zentrosymmetrisch zurück.


1-dimensionales Array + Länge, Größe 9 (89 Bytes)

Nimmt Eingaben in Currying-Syntax vor (length)(array), wobei das Array eindimensional ist.

w=>a=> //
a.some //
(v=>v- //
a[--w])//
/////////
//)]w--[a
// -v>=v(
// emos.a
// >=a>=w

Probieren Sie es online!


Matrix + Breite, Größe 11 (131 Bytes)

Übernimmt Eingaben in der Currying-Syntax (width)(matrix).

/**/w=>a=>a
.some(r=>r.
some(v=>v-a
[y][w-++x],
x=!y--),y=w
);'*/'/*';)
w=y,)--y!=x
,]x++-w[]y[
a-v>=v(emos
.r>=r(emos.
a>=a>=w/**/

Probieren Sie es online!

Nutzlast

w => a => a.some(r => r.some(v => v - a[y][w - ++x], x = !y--), y = w)

Container

/**/CODE;'*/'/*';EDOC/**/

Nur Matrix, Größe 12 (155 Bytes)

Dies ist meine ursprüngliche Lösung, die die Breite der Matrix selbst berechnet.

/**/a=>a[w=a
.length-1,s=
'some']((r,y
)=>r[s]((v,x
)=>v-a[w-y][
w-x]))////*/
/*////))]x-w
[]y-w[a-v>=)
x,v((]s[r>=)
y,r((]'emos'
=s,1-htgnel.
a=w[a>=a/**/

Probieren Sie es online!

Wie?

Wir brauchen ein paar kritische Token, die nicht aufgeteilt werden können:

  • some
  • length
  • )=>

Zeilenumbrüche können fast überall eingefügt werden.

Der Code für entrollte Nutzdaten lautet:

a => a[w = a.length - 1, s = 'some']((r, y) => r[s]((v, x) => v - a[w - y][w - x]))

und ist in die folgende Struktur eingebunden:

/**/CODE////*/

Wenn umgekehrt, wird dies zu einem gültigen Blockkommentar:

/*////EDOC/**/
Arnauld
quelle
18

Gelee , Punktzahl 2

⁼Ṛ
Ṛ⁼

Probieren Sie es online!

Übernimmt die Eingabe als abgeflachte quadratische Matrix (Vektor der Größe ).n2

Erik der Outgolfer
quelle
15

Befunge-93 , Größe 24

   &:00p110p920p::*:v   
vp01:+1g01-1pg02g01&_v#<
>00g`#v_>:           1$^
v2p011<  v:g00p029p01< @
>0g1+20p^>*:#v_1# .#<@ .
v+1g00gg02g01<$ >1+10pv0
>:10g-\88++20g -g-     |
vg02p011_v#`g00g01-1  <1
>1+20p   >:   ^ ^      <
                        
                        
                        
                        
                        
                        
<      ^ ^   :>   p02+1>
1<  1-10g00g`#v_110p20gv
|     -g- g02++88\-g01:>
0vp01+1> $<10g20gg00g1+v
. @<#. #1_v#:*>^p02+1g0>
@ <10p920p00g:v  <110p2v
^$1           :>_v#`g00>
<#v_&10g20gp1-10g1+:10pv
   v:*::p029p011p00:&   

Probieren Sie es online!

Eingabe:, n gefolgt von den Elementen des Arrays, alle durch Leerzeichen getrennt. HINWEIS: Möglicherweise müssen Sie einen anderen Interpreter verwenden, wenn Sie eine ausreichend große Eingabe haben.

Ich bin mir sicher, dass es einen besseren Weg gibt, ich wollte das nur in Befunge ausprobieren. Der eigentliche Codeteil ist die obere Hälfte.

Wie?

Der Code ist in zwei Hauptabschnitte unterteilt, die Initialisierung und die Überprüfung .

Initialisierung:

   &:00p110p920p::*:v   
vp01:+1g01-1pg02g01&_v#<
>00g`#v_>:           1$^

In diesem Codeabschnitt wird die Eingabematrix direkt unter dem Code als ASCII-Zeichen geschrieben. Sowohl in diesem als auch im nächsten Abschnitt werden die drei Zellen oben links im Code als Daten verwendet. Sie werden gespeichert als n, i, j.

Nachprüfung:

                     v 
                     1
v2p011<  v:g00p029p01< @
>0g1+20p^>*:#v_1# .#<@ .
v+1g00gg02g01<$ >1+10pv0
>:10g-\88++20g -g-     |
vg02p011_v#`g00g01-1  <1
>1+20p   >:   ^ ^      <

Dieser Abschnitt prüft jeden Index [1-indiziert] gegen die Bedingung . Wir haben jedoch ein Problem: Wir haben um . Um dies zu beheben, werden die folgenden Formeln verwendet:A i , j = A n + 1 - i , n + 1 - j j 8i,jAi,j=An+1i,n+1jj8

i=(n+1)i

j=n+1(j8)+8=(n+1)+(8+8)j

Die anderen Teile des Codes sind ungelesener Müll, um ihn zentrosymmetrisch zu machen.

Zacharý
quelle
15

Haskell ,n=8

Keine Kommentare!

Übernimmt die Eingabe als 1-D-Liste

s a b=  
    a/=b
f =s<*> 
 reverse
esrever 
 >*<s= f
b=/a     
  =b a s

Probieren Sie es online!

n=10

Übernimmt die Eingabe als 2D-Matrix

r =reverse
s a b=a/=b
f   =s<*>r
c  =concat
g =  f<$>c
c>$<f  = g
tacnoc=  c
r>*<s=   f
b=/a=b a s
esrever= r

Probieren Sie es online!

Vielen Dank an potato44 für all ihre Hilfe im Chat. Und Lynn fürs Golfspielen.

Erläuterung

Die allgemeine Idee hier ist einfach, wir concatlisten sie auf und vergleichen sie mit der umgekehrten. Da wir jedoch zentrosymmetrisch sein wollen, müssen wir vorsichtig vorgehen. Zuerst schreiben wir den Code wie gewohnt:

g=((==)<*>reverse).concat

Damit unsere umgekehrten Zeilen auch für Haskell gültig sind, muss die linke Seite unserer Gleichungen so aussehen, als würde eine Funktionsdefinition tacnoc.)esrever>*<)==((dies nicht tun .

Der erste Schritt, um dies zu beheben, ist die Beseitigung von Klammern.

s a b=a==b
f=s<*>reverse
g=f.concat

Wir haben jedoch einige neue Probleme. Beide .und ==umgekehrt sind gleich, so dass unsere umgekehrten Linien versuchen, die Operatoren neu zu definieren ( <*>umgekehrt ist, >*<dass wir in dieser Hinsicht in Ordnung sind). .kann durch ersetzt werden, <$>da Funktionen Funktoren sind. Und wir können ersetzen ==mit /=, was unseren Ausgang negiert, aber das ist immer noch innerhalb der Spezifikationen. Jetzt haben wir

s a b=a/=b
f=s<*>reverse
g=f<$>concat

Um unsere Zeilenlänge zu verkürzen, verwenden wir alias concatund reverse.

r=reverse
s a b=a/=b
f=s<*>r
c=concat
g=f<$>c

Jetzt beenden wir dies, indem wir alles zentrosymmetrisch und quadratisch machen.

Die kürzere 1-D-Version funktioniert auf die gleiche Weise, mit der Ausnahme, dass nicht concatzwei Zeilen gespeichert werden müssen, indem sie entfernt werden.

Weizen-Assistent
quelle
Wie wäre es damit für n = 10?
Lynn
@Lynn Danke! In meinem Kopf umgekehrt <$>auch <$>.
Weizen-Assistent
9

Python 2 , Größe 10 (109 Bytes)

def f(a):#
 return(a#
==[r[::-1#
]for r in#
a[::-1]])#
#)]]1-::[a
#ni r rof]
#1-::[r[==
#a(nruter 
#:)a(f fed

Probieren Sie es online!

Vorheriges Python 2 , Größe 14 (209 Byte)

lambda a:all(#
a[i][j]==a[-i#
-1][-j-1]for #
i in range(  #
len(a))for j #
in range(len(#
a)))         #
#         )))a
#(nel(egnar ni
# j rof))a(nel
#  (egnar ni i
# rof]1-j-[]1-
#i-[a==]j[]i[a
#(lla:a adbmal

Probieren Sie es online!

Chas Brown
quelle
1
Ich -i-1-j-1~i~j
bin
@Herr. Xcoder: Ich habe ein bisschen damit rumgespielt, aber es ändert nichts am Ergebnis.
Chas Brown
Funktioniert auch in python3.6, ist aber möglicherweise nicht optimal.
SIGSTACKFAULT
8

Pyth, Größe 6 (41 Bytes)

q_M_QQ
q.q   


   q.q
QQ_M_q

Probieren Sie es hier aus

Erläuterung

Die erste Zeile kehrt die Eingabe und jede Zeile um und prüft, ob eine Kopie der Eingabe übrig ist.
Das .qin der zweiten Zeile beendet das Programm, also ist alles danach und qdavor ein No-Op.

Gedächtnisstütze
quelle
8

APL (Dyalog Unicode) , Punktzahl 7 6 5 4

Volles Programm. Fordert zur Eingabe der Matrix-Expression von stdin auf. Gibt eine 1 oder eine 0 aus und gibt dann einen konsistenten Fehler aus. Keine Kommentare!

r←,⎕
r≡⌽r
r⌽≡r
⎕,←r

Probieren Sie es online!

 Eingabeaufforderung für den Ausdruck und
, werte es aus ravel (flatten)
r← speichere das Ergebnis in r(für r avelled)

⌽r spiegeln r
r≡ implizit ausgeben, ob dies ridentisch ist

 Die Tiefe von r(ergibt 1)
r⌽ verwendet r, um das zu drehen
 (dies wird immer a RANK ERRORund quit verursachen , da eine Matrix nicht als linkes Argument für zulässig ist. )

Adam
quelle
7

Perl 6 , Größe 9 8 7

{.flat#
#}talf.
#  ],R[
eq # qe
[R,]  #
.flat}#
#talf.{

Probieren Sie es online!

reverseist der Engpass hier. Ich habe es technisch länger geändert, aber viel spaltbarer [*-1 X-^*]. Okay, ich habe es geändert, [R,]nachdem ich Brad Gilberts Antwort auf eine andere Frage gesehen habe.

Der abgeflachte Code lautet {.flat eq [R,] .flat}.

Edit: Verdammt, ich habe erkannt , ich weiß nicht einmal müssen die erste Liste glätten, aber Versuche zur Verkürzung es zu einer Größe 6 haben mit nur versäumt ein Byte zu viele passen ...

{@_#}_@
eq#<<|
[R,] #
# ],R[
|<<#qe
@_}#_@{

:(

Wenn wir es als eindimensionales Array betrachten, ist es einfach, es in Größe 6 anzupassen.

{$_# }
eq #_$
[R,] #
# ],R[
$_# qe
} #_${

Probieren Sie es online!

Scherzen
quelle
6

Wolfram Language (Mathematica) (nur REPL), Größe 8 (71 Byte)

f=#[[c=-
1;;1;;-1
,c]]==#&
(*      
      *(
&#==]]c,
1-;;1;;1
-=c[[#=f

Gibt Truefür die zentrosymmetrische Eingabe und Falseansonsten zurück.

In Mathematica REPL werden Zeilen mit Syntaxfehlern ignoriert (mit einem dicken roten Balken an der Seite des Bildschirms). Hier werden nur die ersten drei Zeilen f=#[[c=-1;;1;;-1,c]]==#&ausgeführt.

Dieser Code erfasst die Funktion im Namen f.

Leider ist der eingebaute PalindromeQzu lang.

JungHwan min
quelle
6

Pyt , Größe 1

Probieren Sie es online!

Überprüft, ob die Eingabe (in Form von verketteten Zeilen) ein Palindrom ist.

Lynn
quelle
n>=2
6
n2
Hoppla, hab das vergessen.
Zacharý
5

Japt , Größe 9 4 (11 Bytes)

UªSê


êSªU

Probieren Sie es online!

Nimmt eindimensionale Eingaben auf und prüft, ob es sich um ein Palindrom handelt. Wenn Sie möchten, können Sie die beiden leeren Zeilen für eine ASCII-Grafik ausfüllen.
Die alte zweidimensionale Version dreht die Eingabe zweimal und prüft, ob sie dem Original entspricht:

W=U  I
Wz2;II
Vc)eUc
cUe)cV
II;2zW
I  U=W

Probieren Sie es online!

Nit
quelle
1
Nett! Ich glaube, ich habe eine 6 und ich versuche auch, eine unkooperative 4 zu unterbinden, aber sie sind beide viel trivialer als diese.
Shaggy
@Shaggy Ich habe es geschafft, die gleiche Lösung auf sechs zu reduzieren, nachdem ich sie neu gestaltet habe. Vier wären sehr beeindruckend.
Nit
Vorausgesetzt, dass die Eingabe (jetzt) ​​ein eindimensionales Array sein kann, kann dies mit einer Punktzahl von 2 erfolgen.
Shaggy
@ Shaggy Ich bin mir nicht sicher, ob ich sehe wie, die Quelle muss NxN sein.
Nit
wie so
Shaggy
4

Schale , Größe 3

Ṡ=↔
=↔=
↔=Ṡ

Probieren Sie es online! Eingabe als 1D-Liste. Jede Zeile definiert eine Funktion, aber nur die in der ersten Zeile wird aufgerufen.

Ṡ=↔ist ein Palindromtest, der prüft, ob die Eingabe gleich ( =) und umgekehrt ( ) ist.


Schale , Größe 4

Ṡ=↔Σ
Σ↔=Ṡ
Ṡ=↔Σ
Σ↔=Ṡ

Probieren Sie es online! Bei der Eingabe als 2D-Matrix verknüpfen wir ( Σ) die Liste der Listen, bevor wir prüfen, ob es sich um ein Palindrom handelt.

Laikoni
quelle
3

MATL , Punktzahl 4

t,!P
]=%?
?%=]
P!,t

Die Eingabe hat das Format [1 2; 2 1], das ;als Zeilentrennzeichen verwendet wird.

Die Ausgabe erfolgt über STDERR ( standardmäßig zulässig ):

  • Bei zentrosymmetrischer Eingabe wird ein konsistenter Fehlerfehler erzeugt. Mit den aktuellen Linux- und Octave-Versionen in TIO wird die folgende STDERR-Ausgabe erstellt (ohne Berücksichtigung der letzten Zeilen, die mit beginnen Real time: ...):

    octave: X11 DISPLAY environment variable not set
    octave: disabling GUI features
    Python 2.7.15 (default, May 16 2018, 17:50:09) 
    [GCC 8.1.1 20180502 (Red Hat 8.1.1-1)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> >>> /usr/include/c++/8/bits/basic_string.h:1048: std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::reference std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator[](std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::reference = char&; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]: Assertion '__pos <= size()' failed.
    panic: Aborted -- stopping myself...
    

    Der Fehler kann je nach Linux- und Octave-Version unterschiedlich sein, ist jedoch für alle Eingaben gleich.

  • Bei nicht zentrosymmetrischer Eingabe wird kein Fehler erzeugt, und der STDERR-Ausgang an TIO ist

    octave: X11 DISPLAY environment variable not set
    octave: disabling GUI features
    Python 2.7.15 (default, May 16 2018, 17:50:09) 
    [GCC 8.1.1 20180502 (Red Hat 8.1.1-1)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> >>> 
    

Probieren Sie es online! Oder überprüfen Sie alle Testfälle:

  • Zentrosymmetrisch: 1 , 2 , 3 , 4 , 5 , 6 .
  • Nicht zentrosymmetrisch: 1 , 2 , 3 , 4 , 5 , 6 .

Überprüfen Sie, ob das Programm zentrosymmetrisch ist.

Erläuterung

%ist das Kommentarsymbol, das bewirkt, dass der Rest der Zeile ignoriert wird. Zeilenumbrüche werden ebenfalls ignoriert. Also der Code ist einfach

t,!P]=?P!,t

was macht das folgende:

t       % Input, implicit. Duplicate
,       % Do twice
  !     %   Transpose
  P     %   Flip vertically
]       % End
=       % Compare element-wise
?       % If all comparisons gave true
  P     %   Implicit input. Transpose. Actually, since there is no more input, an
        %   error is prand the program exits. The rest of the code is not executed, 
        %   and will be described in parentheses
  !     %   (Transpose)
  ,     %   (Do twice)
    t   %     (Duplicate)
        %   (End, implicit)
        % (End, implicit)
Luis Mendo
quelle
3

Haskell, Größe 11 , 10 , 9 , 8

Nimmt die Eingabe als 2D-Liste! (Dank an Ørjan Johansen)

r= --r}-
 reverse
(==)<*> 
 r.map{-
-{pam.r 
 >*<)==(
esrever 
-}r-- =r
Programm Mann
quelle
Bugs: Zweitens <*>sollte sein >*<. In der 2D fehlt ein Teil -und der umgekehrte Teil hat nicht die richtigen Stellen.
Ørjan Johansen
2

Python 2 , Größe 8

i=input#
a=i()###
a[::-1##
]!=a<_##
##_<a=!]
##1-::[a
###)(i=a
#tupni=i

Probieren Sie es online!

n2

Die Liste wird einfach als Palindrom markiert. Wenn dies der Fall ist, a[::-1]!=a<_versagt die Vergleichskette beim !=Schritt und schließt kurz. Andernfalls wird die unbekannte Variable _ausgewertet und das Programm stürzt ab.

Lynn
quelle
2

R , Größe 9

   #)x-))
#(nacs-<x
#(ver(yna
#       #
#       #
#       #
any(rev(#
x<-scan(#
))-x)#   

Probieren Sie es online!

Die letzten drei Zeilen sind das eigentliche Programm, das ein 1D-Array als Eingabe verwendet und prüft, ob es der Umkehrung entspricht. Wahrheitswert: FALSE, Falscher Wert: TRUE.

any(rev(x<-scan())-x)

R + Pryr, Größe 9

pryr::f(#
any(rev(#
x)-x))#  



  #))x-)x
#(ver(yna
#(f::ryrp

Probieren Sie es online!

JayCe
quelle
2

C # (.NET Core) , Punktzahl 13 11 10

l=>a=>a.//
Where((e//
,i)=>e!=//
a[l-i-1]//
).Any()///
///()ynA.)
//]1-i-l[a
//=!e>=)i,
//e((erehW
//.a>=a>=l

Probieren Sie es online!

Nimmt die Eingabe als 1D-Array und n 2 als Länge; Gibt falsefür zentrosymmetrisch und truefür nicht zentrosymmetrisch zurück. Diese Version verwendet, System.Linqaber ich weiß nicht, wie ich sie in die Codeübermittlung einpassen soll, da die jeweiligen Anforderungen der Herausforderung bestehen. Abgerollter Code:

l => a => a.Where((e,i) => e != a[l-i-1]).Any()

Das Folgende ist meine vorherige Einsendung, die LINQ nicht verwendet:

C # (.NET Core) , Ergebnis 16 15 13

l=>a=>{/////*
var r=1<2;for
(int i=0;i<l;
)r&=a[i]==a[l
-i++-1];
return r;}
     /*/
   };r nruter
     ;]1-++i-
l[a==]i[a=&r)
;l<i;0=i tni(
rof;2<1=r rav
*/////{>=a>=l

Probieren Sie es online!

Abgerollter Code:

l => a =>
{
    var r = 1<2;
    for (int i = 0; i < l;)
        r &= a[i] == a[l-i++-1];
    return r;
}
Charlie
quelle
Wenn Sie intzu var(also auch tnizu rav) wechseln , funktioniert die zweite Einreichung auch in JavaScript.
Zacharý
2

Ruby , 9 Punkte 8

->z{z==#
z.######
reverse#
}#######
#######}
#esrever
######.z
#==z{z>-

Probieren Sie es online!

Ein Lambda, das eine abgeflachte Matrix als Eingabe verwendet. Gibt true für zentrosymmetrisch zurück, andernfalls false.

-1 dank Mr.XCoder,

Unverpackt:

->z{
  z == z.reverse
}
benj2240
quelle
2

Sauber , Größe 9

Vielen Dank an Ørjan Johansen !

import //
 StdEnv//
r=reverse
?m=m==r//
    m    
//r==m=m?
esrever=r
//vnEdtS 
// tropmi

Probieren Sie es online!

Sauber , Größe 10

import/*//
*/StdEnv//
r =reverse
?m      //
 =m==r m//
//m r==m= 
//      m?
esrever= r
//vnEdtS/*
//*/tropmi

Probieren Sie es online!

Οurous
quelle
1
Das liegt nicht am Zeilenumbruch, sondern am Einzug. 9 Zeilen
Ørjan Johansen
@ ØrjanJohansen Ich kann nicht glauben, dass ich vergessen habe, dass du sie einrücken könntest. Vielen Dank!
Urous
Gern geschehen, und ich habe die mittlere Zeile bearbeitet, nachdem ich sie gepostet habe. Es muss nur so sein m.
Ørjan Johansen
@ ØrjanJohansen Ich habe die Antwort aktualisiert, um dies widerzuspiegeln. So sieht es auch sehr elegant aus.
Οurous
2

05AB1E , Größe 3 (11 Bytes )

ÂQq

qQÂ

Eingabe als einzelne Liste.
Probieren Sie es online aus.

Ich denke, dieser zählt nicht.; P

ÂQ
qâ

Eingabe als einzelne Liste.
Probieren Sie es online aus.

Erläuterung:

         # Bifurcate this list (short for DR: Duplicate & Reverse copy)
 Q        # Check if the input-list and the reversed list are equal
  q       # Terminate the program
   qQâ    # No-ops

Einige Alternativen der Größe 3 (11 Byte ):

R€R
QqQ
R€R

Matrix als Eingabe.
Probieren Sie es online aus.

RQ 
 q  
 QR

Einzelliste als Eingabe.
Probieren Sie es online aus.

Kevin Cruijssen
quelle
1

C (gcc) , 12 · 12

C(e,n,t,r)//
int*e;{for//
(r=t=0;e[t//
];r|=e[t]^//
e[~t+++n])//
;n=!!!!r;}//
//};r!!!!=n;
//)]n+++t~[e
//^]t[e=|r;]
//t[e;0=t=r(
//rof{;e*tni
//)r,t,n,e(C

Probieren Sie es online!

Jonathan Frech
quelle
1

> <>, Größe 6

!/l2(\
s\?\ ?
/{=/ ;
: /={/
? \?\s
\(2l/!

Probieren Sie es online!

(Es stellt sich heraus, dass es ein Schmerz ist, der mehrere Werte an -v in tio übergibt.)

Die Eingabe wird als eindimensionales Array als anfänglicher Stapelzustand mit -v angenommen. Wird ohne Ausgabe beendet, wenn die Matrix zentrosymmetrisch ist, und wird mit einem Fehler beendet (druckt "Etwas riecht nach Fisch ..."), wenn nicht.

l2(    Checks if the length of the stack is less than 2
?;     Exits cleanly if so

{=     Checks if the first and last elements are equal
?\s    Causes an error ('s' is not a valid instruction) if not

Ich war mit diesem Ausgabeformat nicht ganz zufrieden, daher hier eine Größe 7, die 1 für wahr und 0 für falsch ausgibt.

!/l2(\\
 ?   ?0
 =;n1/n
;{   {;
n/1n;= 
0?   ? 
\\(2l/!

Probieren Sie es online!

Sasha
quelle
Gute Arbeit! > <> kann eine lustige Sprache sein, mit der man arbeiten kann, es sei denn, es ist ein komplexes Programm, dann ist es ein Schmerz.
mbomb007
1
Wenn Sie die Wahrheits- und Falschheitswerte tauschen, können Sie sie mit{-?;
Jo King
1

Stax , n = 3

$cr
=q=
rc$

Führen Sie es aus und debuggen Sie es

Erläuterung:

$cr =q= rc$ Full program, implicit input
$           Flatten
 cr         Copy and reverse
    =       Compare to original
     q      Print result
      =     Silently error because there is only one item on stack
        rc$ Not executed

3 ist das Beste, weil ich mindestens drei Befehle benötige: Kopieren, Umkehren und Vergleichen

Stax , n = 4

Mrxr
M=qX
Xq=M
rxrM

Führen Sie es aus und debuggen Sie es

Erläuterung:

Mrxr M=qX Xq=M rxrM Full program, implicit input
Mr                  Transpose and reverse
  x                 Push input again
   r M              Reverse and transpose
      =             Compare
       qX Xq        Print result twice and save to X
            =       Silently error because there is only one item on stack
             M rxrM Not executed
wastl
quelle
1

Java 10, Größe 13 (181 Bytes)

a->{var r///*
=1>0;for(int 
l=a.length,i=
0;i<l;)r&=a[i
]==a[l-++i]; 
return r;}   
     /*/     
   };r nruter
 ;]i++-l[a==]
i[a=&r);l<i;0
=i,htgnel.a=l
 tni(rof;0>1=
*///r rav{>-a

Probieren Sie es online aus.

Inspiriert von @Charlies C # Antwort .

Golf Erklärung:

a->{var r=1>0;for(int l=a.length,i=0;i<l;)r&=a[i]==a[l-++i];return r;}

a->{                    //  Method with byte-array parameter and boolean return-type
  var r=1>0;            //  Result-boolean, starting at true
  for(int l=a.length,   //  The length of the input-array
      i=0;i<l;)         //  Loop `i` in the range [0, length)
    r&=                 //   Bitwise-AND the result-boolean with:
       a[i]             //    Whether the current item
           ==a[l-++i];  //    equals the opposite item
  return r;}            //  Return the result
Kevin Cruijssen
quelle
1

C (gcc) , 11 Punkte

Nimmt eine Liste von int und n als Argumente. Liefert n als Wahrheitswert, 0 als Falsch.

/*//};n=l;k
--*==++l*=*
n);l>k;n*n+
l=k(rof{;l*
tni)n,l(f;k
*/*/////*/*
k;f(l,n)int
*l;{for(k=l
+n*n;k>l;)n
*=*l++==*--
k;l=n;}//*/

Probieren Sie es online!

Gastropner
quelle
0

Javascript ES6, Größe 8:

/***/a=>
""+a==a.
reverse(
)/////*/
/*/////)
(esrever
.a==a+""
>=a/***/

Javascript ES6, Größe 7 (ist es gültig?):

a=>""+a
==a.//=
reverse
`     `
esrever
=//.a==
a+"">=a

Prüfung:

<script>
f=

a=>""+a
==a.//=
reverse
`     `
esrever
=//.a==
a+"">=a
</script>

<script>
console.log([
  [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],
].every(f))

console.log([
  [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],
].every(x=>!f(x)))
</script>

oder mit Lambda gespeichert in Variable mit dem Namen a:

a=

a=>""+a
==a.//=
reverse
`     `
esrever
=//.a==
a+"">=a

console.log([
  [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],
].every(a))

console.log([
  [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],
].every(x=>!a(x)))

Qwertiy
quelle
0

Clojure, Größe 9

#(= %(;;;
reverse;;
(map;;;;;
reverse;;
%)));)))%
;;esrever
;;;;;pam(
;;esrever
;;;(% =(#

Probieren Sie es online!

Lispy Louie
quelle