Sie erhalten ein zweidimensionales Array und eine Zahl und werden gefragt, ob die angegebene Matrix Toeplitz ist oder nicht.
Eingabeformat:
Sie erhalten eine Funktion, die die two-dimensional
Matrix als Argument verwendet.
Ausgabeformat:
Rückkehr 1
von der Funktion, wenn die Matrix Toeplitz ist , andernfalls Rückkehr -1
.
Einschränkungen:
3 < n,m < 10,000,000
Wo n
ist die Anzahl der Zeilen, während m
die Anzahl der Spalten ist.
Beispieltestfall:
Sample Input :
4
5
6 7 8 9 2
4 6 7 8 9
1 4 6 7 8
0 1 4 6 7
Sample Output :
1
Wertung
Dies ist Code-Golf , daher gewinnt die kürzeste Antwort in Bytes.
code-golf
grid
decision-problem
matrix
Martin Ender
quelle
quelle
Antworten:
Mathematica, 42 Bytes
Mathematica verfügt nicht über eine integrierte Funktion, um zu überprüfen, ob es sich bei einer Toeplitz-Matrix um eine integrierte Toeplitz-Matrix handelt. Wir generieren also eine aus der ersten Spalte (
#&@@@#
) und der ersten Zeile (#&@@#
) der Eingabe und prüfen, ob sie der Eingabe entspricht. Um dasTrue
/False
Ergebnis in1
/ umzuwandeln , verwenden-1
wirBoole
(um1
oder zu geben0
) und transformieren dann einfach das Ergebnis mit2x-1
.quelle
Oktave , 30 Bytes
Ich gehe davon aus, dass ich nicht mit 1.000.000 x 1.000.000 Matrizen umgehen muss, wie es in der Herausforderung heißt. Dies funktioniert für Matrizen, die den verfügbaren Speicher nicht überschreiten (in meinem Fall weniger als 1 TB).
Probieren Sie es online aus!
Dies nimmt eine Matrix
x
als Eingabe und erstellt eine Toeplitz-Matrix basierend auf den Werten in der ersten Spalte und der ersten Zeile. Anschließend wird jedes Element der Matrizen auf Gleichheit überprüft. Wenn alle Elemente gleich sind, ist die Eingabe eine Toeplitz-Matrix.Die Ausgabe ist eine Matrix mit den gleichen Abmessungen wie die Eingabe. Wenn die Ausgabe Nullen enthält, wird dies als Oktave angesehen.
Bearbeiten:
Habe gerade das strenge Ausgabeformat bemerkt:
Dies funktioniert für 41 Bytes. Es könnte möglich sein, ein oder zwei Bytes aus dieser Version zu spielen, aber ich hoffe, dass die Ausgaberegeln etwas gelockert werden.
quelle
Gelee , 5 Bytes
Probieren Sie es online aus!
Folgen Sie der Definition hier .
quelle
05AB1E , 11 Bytes
Probieren Sie es online aus!
Erläuterung
quelle
Haskell , 43 Bytes
Probieren Sie es online aus!
quelle
False
erlaubt wäre, hätte ich es vielleicht um ein Byte geschlagen.Mathematica, 94 Bytes
Eingang
eine andere basiert auf dem Algorithmus von Stewie Griffin
Mathematica, 44 Bytes
quelle
s
? Kannst du nicht einfach#
stattdessen verwenden?Java 7,
239233220113 Bytes-107 Bytes nach einem Tipp zur Verwendung eines effizienteren Algorithmus dank @Neil .
Erläuterung:
Probieren Sie es hier aus.
quelle
r
=n
undc
=m
wenn Sie es mit der Herausforderung vergleichen).-->
Operator benutzen !Haskell , 51 Bytes
t
Nimmt eine Liste von Ganzzahllisten und gibt eine Ganzzahl zurück.Probieren Sie es online aus!
Dies könnten 39 oder 38 Bytes mit wahrheitsgemäßer / falscher Ausgabe gewesen sein.
Die Idee
init
wurde von Emignas 05AB1E-Antwort inspiriert, die eine sehr ähnliche Methode verwendet. davor habe ich einen verschachtelten Reißverschluss verwendet.Wie es funktioniert
zipWith((.init).(/=).tail)=<<tail
ist eine punktfreie Form von\m->zipWith(\x y->tail x/=init y)(tail m)m
.m
und prüft, ob sich das erste mit entferntem ersten Element von dem zweiten mit entferntem zweiten Element unterscheidet.or
kombiniert dann die Prüfungen für alle Zeilenpaare.1-sum[2|...]
konvertiert das Ausgabeformat.quelle
JavaScript (ES6),
6554 Bytequelle
a=>a.some(b=>b.some((v,i)=>d[i]-(d[i]=v),d=[,...d]),d=[])?-1:1
(62 Bytes)Ruby , 54 Bytes
Genau wie angegeben, kann mehr Golf gespielt werden, wenn eine flexible Eingabe / Ausgabe akzeptiert wird.
Erläuterung:
Iterieren Sie in der Matrix und vergleichen Sie jede Zeile mit der obigen Zeile, die um eins nach rechts verschoben ist. Wenn sie unterschiedlich sind, verwenden Sie ein leeres Array für die nächste Iteration. Geben Sie am Ende -1 zurück, wenn das endgültige Array leer ist, oder 1, wenn es mindestens 2 Elemente enthält (da die kleinstmögliche Matrix 3x3 ist, gilt dies, wenn alle Vergleiche true zurückgeben).
Probieren Sie es online aus!
quelle
<=>
, um das Ergebnis zu berechnen!|(*x,_),y|
damit Sie nicht in Scheiben schneiden müssenx
?PHP, 70 Bytes
quelle
Python, 108
Überhaupt nicht effizient, da es
n+m
beim Filtern nach Diagonalen jedes Element mal berührt . Überprüft dann, ob es mehr als ein eindeutiges Element pro Diagonale gibt.quelle
Axiom, 121 Bytes
m muss eine Matrix eines Elements sein, das ~ = erlaubt; ungolf es
quelle
Netzhaut , 148 Bytes
Probieren Sie es online aus!
Eine N × M-Eingabematrix
wird zuerst in eine N × (N + M-1) -Matrix umgewandelt, indem die Diagonalen folgendermaßen ausgerichtet werden:
und dann wird die erste Spalte wiederholt überprüft, um eine einzelne eindeutige Nummer zu enthalten, und entfernt, wenn dies der Fall ist. Die Matrix ist Toeplitz, wenn die Ausgabe leer ist.
quelle
MATL , 11 Bytes
Probieren Sie es online aus!
Die unkomplizierte Methode "Konstruiere eine Toeplitz-Matrix und überprüfe sie", die die wenigen Antworten verwenden, fühlte sich für mich irgendwie langweilig an (und es sieht so aus , als wäre das sowieso 1 Byte länger). Also habe ich mich für die Methode "Überprüfen, ob jede Diagonale nur einen eindeutigen Wert enthält" entschieden.
T&Xd
- Extrahieren Sie die Diagonalen der Eingabe und erstellen Sie eine neue Matrix mit ihnen als Spalten (Auffüllen mit Nullen nach Bedarf)"
- durch die Spalten davon iterieren@Xz
- Drücken Sie die Iterationsvariable (die aktuelle Spalte) und entfernen Sie (Auffüllen) Nullen daraus&=
- Broadcast Equality Check - Hiermit wird eine Matrix mit allen Einsen (wahr) erstellt, wenn alle verbleibenden Werte gleich sind. Andernfalls enthält die Matrix einige Nullen, was falsch istv
- Verketten Sie die Ergebniswerte miteinander, um einen Endergebnisvektor zu erstellen, der entweder wahr (alle Einsen) oder falsch (einige Nullen) ist.quelle
R , 48 Bytes
Probieren Sie es online aus!
quelle
Clojure, 94 Bytes
quelle