Dies ist eine zweidimensionale Version dieser Frage .
Bei einem nicht leeren zweidimensionalen Array / einer Matrix, die nur nicht negative ganze Zahlen enthält:
Das Array mit entfernten umgebenden Nullen ausgeben, dh das größte zusammenhängende Subarray ohne umgebende Nullen:
Beispiele:
Input:
[[0, 0, 0, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1], [0, 0, 1, 1, 1], [0, 0, 0, 0, 0]]
Output:
[[0, 1, 0], [0, 0, 1], [1, 1, 1]]
Input:
[[0, 0, 0, 0], [0, 0, 0, 3], [0, 0, 0, 0], [0, 5, 0, 0], [0, 0, 0, 0]]
Output:
[[0, 0, 3], [0, 0, 0], [5, 0, 0]]
Input:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Output:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Input:
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
Output:
[]
Input:
[[0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]]
Output:
[[1, 1, 1, 1]]
Input:
[[0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]]
Output:
[[1], [1], [1]]
Input:
[[1, 1, 1, 1], [1, 2, 3, 1], [1, 1, 1, 1]]
Output:
[[1, 1, 1, 1], [1, 2, 3, 1], [1, 1, 1, 1]]
code-golf
array-manipulation
Alephalpha
quelle
quelle
:)
Nur schwer, es kurz zu machen.[[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]]
(das Ergebnis hat eine Breite / Höhe von1
)Antworten:
MATL , 3 Bytes
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
(implicit)
.Wolfram Language (Mathematica) , 42 Byte
Probieren Sie es online!
Zelluläre Automaten sind in der Tat die Antwort auf das Leben , das Universum und alles . 1
Wie?
CellularAutomaton
Akzeptiert ein Eingabearray und einen optionalen Hintergrundwert. Gibt daher an,{#,0}
dass auf die Eingabe eine zellulare Automatenregel angewendet werden soll, vorausgesetzt, der Hintergrund ist0
s.Eine nette Sache hier ist, dass
CellularAutomaton
die Ausgabe so beschnitten wird, dass kein Rand von Hintergrundzellen vorhanden ist (da die Ausgabe ansonsten auf einer unendlichen Ebene liegt).Der Code wendet die Regel
{Null, {}, {0, 0}}
- Anwenden des KopfesNull
auf den 0-Radius-Nachbarn jeder Zelle (dh nur die Mitte: die Zelle selbst) - genau zu den angegebenen0
Zeiten an. Das Ergebnis ist die ursprüngliche Eingabe, wobei jedoch der Hintergrund entfernt wird (dh die umgebenden0
s werden abgeschnitten ).1. Sehen Sie die Bytecount meiner Antwort? ;)
quelle
JavaScript (ES6), 98 Byte
Probieren Sie es online!
Wie?
Um das Fehlen einer integrierten Zip -Funktion zu umgehen , definieren wir eine Funktion g () , die abhängig vom Wert des globalen Flags z entweder auf die Zeilen oder auf die Spalten der Eingabematrix a [] angewendet werden kann .
g () sucht nach dem minimalen Index m und dem maximalen Index M von entweder nicht leeren Zeilen (wenn z undefiniert ist) oder nicht leeren Spalten (wenn z definiert ist) und gibt das entsprechende Segment entweder der Matrix selbst oder einer gegebenen Zeile zurück der Matrix.
Zusammenfassen:
.map(z=g)
Kommentiert
quelle
Haskell ,
6261 BytesProbieren Sie es online!
foldr(zipWith(:))e
withe=[]:e
ist etwas kürzertranspose
undsnd.span(all(<1))
löscht führende Nullen aus einer Liste von Listen. Wietranspose
folgt,reverse
entspricht eine 2D-Liste einer Drehung um 90 °, der Codef.f.f.f
ist nur vier Mal , wenn führende Listen von Nullen gelöscht und gedreht werden .quelle
Pyth , 13 Bytes
Probieren Sie es online!
quelle
=_CQ
würde anstelle von arbeiten=Q_CQ
.Gelee , 10 Bytes
Probieren Sie es online!
quelle
Brachylog ,
24222019 BytesProbieren Sie es online!
Gibt die Ergebnismatrix als Array von Arrays aus oder false für leere Ausgaben.
(Dank an @Fatalize für das Vorschlagen eines Inline-Prädikats und das Speichern von 1 Byte.)
Erläuterung
Prädikat 0 (Haupt):
Prädikat 1:
quelle
{s.h+>0∧.t+>0∧}\↰₁\
. (Dies gilt für so ziemlich jede Brachylog-Antwort. Prädikate in neuen Zeilen werden nur dann implementiert, wenn Sie lesbarere Dinge schreiben möchten.)R ,
96 10097 BytesProbieren Sie es online!
Der
~
Helfer nimmt einen nicht negativen Vektor und gibt einen Vektor mitFALSE
für das "Äußere"0
des Vektors undTRUE
für Positive und alle "Inneren" zurück0
. Diese Funktion wird auf die Zeilen- und Spaltensummen der Eingabematrix angewendet.~
und!
Rs Parser-Behandlung von Operatoren verwenden.Korrigiert gemäß @ DigEmAlls Kommentar, aber mit einigen Bytes, die von @ J.Doe zurückgespielt wurden
quelle
drop=F
wie ich es getan habe, sonst geben diese 2 Tests einen Vektor anstelle von Zeile und Spalte zurück: Versuchen Sie es online!drop=F
. Immer noch unter einer Tonne!R ,
8979 BytesProbieren Sie es online!
Vielen Dank an @ngm für den Testfallcode und @ J.Doe für das Speichern von 10 Bytes!
drop=F
Parameter hinzufügen , da das Standardverhalten von R die Matrix aus einer Zeile / Spalte in Vektoren umwandelt ...quelle
range
und Optimierung der IndexierungAPL (Dyalog Classic) ,
1715 BytesProbieren Sie es online!
quelle
Python 2 , 71 Bytes
Kehrt durch Ändern der Eingabe zurück. Eine Liste sollte als Eingabe übergeben werden.
Probieren Sie es online!
Python 2 , 77 Bytes
Dies ändert auch die Eingabe, aber es funktioniert ....
Probieren Sie es online!
quelle
Wolfram Language (Mathematica) , 66 Bytes
Probieren Sie es online!
Jetzt funktioniert das Auffüllen des Arrays mit Nullen (danke @JungHwanMin)!
Ein zweites Dankeschön an @JungHwanMin für die Einsparung von 4 Bytes
quelle
Gelee , 12 Bytes
Probieren Sie es online!
Als eine Funktion.
quelle
Wolfram Language (Mathematica) , 48 Byte
Probieren Sie es online!
Mach es auf die normale Art und Weise.
quelle
\[Transpose]
Kann hier leider nicht arbeiten.Schale , 11 Bytes
Probieren Sie es online!
Ich habe das Gefühl, dass einige Bytes durch Kürzen des
!5¡
Teils abgeschabt werden könnten .Wie es funktioniert
Karte die aktuelle Version des Eingangs über und: jede Rückwärts nach dem längsten Präfix fallen gelassen, die nur aus Nullen consiting (dieses Präfix dropping durch Verwendung Husk der durchgeführt wird
↓
, das ist eine Funktion , die den längsten Lauf aufeinander folgender Elemente von Beginn der Ernte Liste, die wahrheitsgemäße Ergebnisse liefert, wenn eine Funktion durchlaufen wird, nämlich¬
logisch nicht).Transponieren, fehlende Einträge durch 0 ersetzen .
quelle
Retina , 87 Bytes
Probieren Sie es online! Erläuterung:
Bis mindestens eine Zeile nicht mit Null beginnt ...
... entfernen Sie die führende Null aus jeder Zeile.
Bis mindestens eine Zeile nicht mit Null endet ...
... entfernen Sie die nachstehende Null aus jeder Zeile.
Entfernen Sie führende Nullzeilen.
Entfernen Sie nachfolgende Nullzeilen oder die letzte verbleibende Null.
quelle
Kohle , 48 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Beinhaltet 15 Bytes für die Formatierung. Erläuterung:
4 mal wiederholen.
Wiederholen, solange das Array nicht leer ist, aber die letzte Zeile auf Null summiert ...
Entfernen Sie die letzte Zeile aus dem Array und drucken Sie eine Zeile der Länge seiner Summe, dh nichts.
Wenn das Array nicht leer ist, transponieren Sie es.
Formatieren Sie das Array gut für die Anzeige. (Standardausgabe wäre
Iθ
stattdessen.)quelle
JavaScript,
144140129127 Bytes140 -> 129 Bytes, danke @Arnauld
Algorithmus
quelle
some/some
anstelle derfindIndex/find
Hilfsfunktionsdeklarationen die Klammern um das (jetzt einzelne) Hauptfunktionsargument verwenden und neu anordnen.[[]]
damit t garantiert in der Lage ist, damit zu arbeitenw[0]
.Python 2 ,
118116 BytesProbieren Sie es online!
Gerettet:
quelle
s=sum
in Lambda-DefinitionPHP (> = 5,4),
200194186184 Bytes(-6 Bytes durch Rückgabe
null
anstelle eines leeren Arrays)(-8 Bytes dank Titus )
(-2 Bytes mit Referenzaufruf dank Titus )
Probieren Sie es online!
Wie?
Findet den Min- und Max-Index für Zeilen (
$m
&$M
) und Spalten ($n
&$N
) und ersetzt die Eingabe durch ein Sub-Array von$m,$n
bis$M,$N
(dies ist ein Referenzaufruf).quelle
if($C){$m>$r&&$m=$r;$M>$r||$M=$r;$n>$c&&$n=$c;$N>$c||$N=$c;}
while($m<=$M)$o[]=array_slice($a[$m++],$n,$N-$n+1);
&&
und||
und ich bin mir sicher, dass ich diesen Trick auch an anderen Orten anwenden kann.$a=
stattreturn
.Oktave,
4849 BytesProbieren Sie es online!
Finden Sie Punkte ungleich Null und ordnen Sie sie in einer neuen dünnen Matrix neu an.
quelle
K (ngn / k) , 22 Bytes
Probieren Sie es online!
quelle
J , 24 Bytes
Probieren Sie es online!
Erläuterung
quelle
Ruby ,
7363 BytesProbieren Sie es online!
Edit: vereinfacht, auch die Vorgängerversion stürzte für alle
0
s abWie es funktioniert:
0
s istquelle
&.sum<0
statt&.sum<1
.Oktave ,
7874 BytesProbieren Sie es online!
Erläuterung
Dadurch wird die Matrix ausreichend oft um
90
Grad (x=rot90(x)
) gedreht (for k=1:... end
). Die Anzahl der Umdrehungen ist ein Vielfaches von4
, sodass die endgültige Matrix die ursprüngliche Ausrichtung aufweist. Insbesondere entspricht die Anzahl der Umdrehungen4
der Anzahl der Nullen in der Matrix (nnz(~x)*4
).Wenn sich links für jede Drehung eine oder mehrere Spalten befinden, die nur aus Nullen bestehen, werden diese entfernt (
x=x(:,~~cumsum(any(x,1)))
).Was nach diesem Vorgang von der Matrix übrig bleibt, wird von der Funktion (
function x=f(x)
) ausgegeben .quelle
Stax , 14 Bytes
Führen Sie es aus und debuggen Sie es
Alternativ auch 14 Bytes
Führen Sie es aus und debuggen Sie es
quelle
PHP, 188 Bytes
Anruf durch Hinweis.
Nervenzusammenbruch
quelle
Sauber , 73 Bytes
Probieren Sie es online!
Sehr ähnlich zu Laikonis Haskell-Antwort .
quelle
Python 2 , 86 Bytes
Probieren Sie es online!
Nimmt eine Liste von Listen auf und gibt eine Liste von Tupeln zurück.
Erläuterung
Missbräuchlich zum Teufel aus dem Listenverständnis. Dies ist der entsprechende erweiterte Code:
quelle
Japt
-h
,2311 BytesVersuch es
Erläuterung
quelle