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 ,A i ,
Beispiele für solche Matrizen
Hier ist ein Beispiel für die Symmetrie von Matrizen wie diesen (aus dem oben genannten Wikipedia-Artikel entlehnt):
Eine zentrosymmetrische Matrix mit gerader Seitenlänge ( ):
Und eine ungerade Seitenlänge ( ):
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.
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 n
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 2
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]]
#
) zu beenden , sodass die untere Hälfte des Codes ein Kommentar wäre.#
funktioniert Python nicht, da die vorangestellten Kommentare#
nur inline sind: PAntworten:
JavaScript (ES6), Größe
12119Alle 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.Probieren Sie es online!
Matrix + Breite, Größe 11 (131 Bytes)
Übernimmt Eingaben in der Currying-Syntax
(width)(matrix)
.Probieren Sie es online!
Nutzlast
Container
Nur Matrix, Größe 12 (155 Bytes)
Dies ist meine ursprüngliche Lösung, die die Breite der Matrix selbst berechnet.
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:
und ist in die folgende Struktur eingebunden:
Wenn umgekehrt, wird dies zu einem gültigen Blockkommentar:
quelle
Gelee , Punktzahl 2
Probieren Sie es online!
Übernimmt die Eingabe als abgeflachte quadratische Matrix (Vektor der Größe ).n2
quelle
Befunge-93 , Größe 24
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:
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:
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 8ich , j EINich , j= An + 1 - i , n + 1 - j j 8
Die anderen Teile des Codes sind ungelesener Müll, um ihn zentrosymmetrisch zu machen.
quelle
Haskell ,n=8
Keine Kommentare!
Übernimmt die Eingabe als 1-D-Liste
Probieren Sie es online!
Übernimmt die Eingabe als 2D-Matrix
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
concat
listen 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: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.
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 wirUm unsere Zeilenlänge zu verkürzen, verwenden wir alias
concat
undreverse
.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
concat
zwei Zeilen gespeichert werden müssen, indem sie entfernt werden.quelle
<$>
auch<$>
.Python 2 , Größe 10 (109 Bytes)
Probieren Sie es online!
Vorheriges Python 2 , Größe 14 (209 Byte)
Probieren Sie es online!
quelle
-i-1
-j-1
~i
~j
Pyth, Größe 6 (41 Bytes)
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
.q
in der zweiten Zeile beendet das Programm, also ist alles danach undq
davor ein No-Op.quelle
APL (Dyalog Unicode) , Punktzahl
7654Volles 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!
Probieren Sie es online!
⎕
Eingabeaufforderung für den Ausdruck und,
werte es aus ravel (flatten)r←
speichere das Ergebnis inr
(für r avelled)⌽r
spiegelnr
r≡
implizit ausgeben, ob diesr
identisch ist≡
Die Tiefe vonr
(ergibt 1)r⌽
verwendetr
, um das zu drehen(dies wird immer a
RANK ERROR
und quit verursachen , da eine Matrix nicht als linkes Argument für zulässig ist.⌽
)quelle
Perl 6 , Größe
9 87Probieren Sie es online!
Okay, ich habe es geändert,reverse
ist der Engpass hier. Ich habe es technisch länger geändert, aber viel spaltbarer[*-1 X-^*]
.[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 ...
:(
Wenn wir es als eindimensionales Array betrachten, ist es einfach, es in Größe 6 anzupassen.
Probieren Sie es online!
quelle
Wolfram Language (Mathematica) (nur REPL), Größe 8 (71 Byte)
Gibt
True
für die zentrosymmetrische Eingabe undFalse
ansonsten 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
PalindromeQ
zu lang.quelle
Pyt , Größe 1
Probieren Sie es online!
Überprüft, ob die Eingabe (in Form von verketteten Zeilen) ein Palindrom ist.
quelle
Japt , Größe
94 (11 Bytes)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:
Probieren Sie es online!
quelle
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.quelle
MATL , Punktzahl 4
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: ...
):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
Probieren Sie es online! Oder überprüfen Sie alle Testfälle:
Ü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 einfachwas macht das folgende:
quelle
Haskell, Größe
11,10,9, 8Nimmt die Eingabe als 2D-Liste! (Dank an Ørjan Johansen)
quelle
<*>
sollte sein>*<
. In der 2D fehlt ein Teil-
und der umgekehrte Teil hat nicht die richtigen Stellen.Python 2 , Größe 8
Probieren Sie es online!
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.quelle
R , Größe 9
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.
R + Pryr, Größe 9
Probieren Sie es online!
quelle
C # (.NET Core) , Punktzahl
13 1110Probieren Sie es online!
Nimmt die Eingabe als 1D-Array und n 2 als Länge; Gibt
false
für zentrosymmetrisch undtrue
für nicht zentrosymmetrisch zurück. Diese Version verwendet,System.Linq
aber ich weiß nicht, wie ich sie in die Codeübermittlung einpassen soll, da die jeweiligen Anforderungen der Herausforderung bestehen. Abgerollter Code:Das Folgende ist meine vorherige Einsendung, die LINQ nicht verwendet:
C # (.NET Core) , Ergebnis
16 1513Probieren Sie es online!
Abgerollter Code:
quelle
int
zuvar
(also auchtni
zurav
) wechseln , funktioniert die zweite Einreichung auch in JavaScript.Ruby ,
9Punkte 8Probieren 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:
quelle
Sauber , Größe 9
Vielen Dank an Ørjan Johansen !
Probieren Sie es online!
Sauber , Größe 10
Probieren Sie es online!
quelle
m
.05AB1E , Größe 3 (11 Bytes )
Eingabe als einzelne Liste.
Probieren Sie es online aus.
Ich denke, dieser zählt nicht.; P
Eingabe als einzelne Liste.
Probieren Sie es online aus.
Erläuterung:
Einige Alternativen der Größe 3 (11 Byte ):
Matrix als Eingabe.
Probieren Sie es online aus.
Einzelliste als Eingabe.
Probieren Sie es online aus.
quelle
C (gcc) , 12 · 12
Probieren Sie es online!
quelle
> <>, Größe 6
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.
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.
Probieren Sie es online!
quelle
{-?;
Stax , n = 3
Führen Sie es aus und debuggen Sie es
Erläuterung:
3 ist das Beste, weil ich mindestens drei Befehle benötige: Kopieren, Umkehren und Vergleichen
Stax , n = 4
Führen Sie es aus und debuggen Sie es
Erläuterung:
quelle
Japt , Größe 2 (5 Bytes)
Versuch es
quelle
Java 10, Größe 13 (181 Bytes)
Probieren Sie es online aus.
Inspiriert von @Charlies C # Antwort .
Golf Erklärung:
quelle
C (gcc) , 11 Punkte
Nimmt eine Liste von int und n als Argumente. Liefert n als Wahrheitswert, 0 als Falsch.
Probieren Sie es online!
quelle
Javascript ES6, Größe 8:
Javascript ES6, Größe 7 (ist es gültig?):
Prüfung:
oder mit Lambda gespeichert in Variable mit dem Namen
a
:quelle
Clojure, Größe 9
Probieren Sie es online!
quelle