Wenn Sie ein 2D-Array von Ganzzahlen haben, sortieren Sie die Zeilen und Spalten in Blöcken. Dies bedeutet, dass Sie nur eine bestimmte Zeile oder Spalte sortieren müssen, aber die zum Sortieren erforderlichen Transformationen auf jede andere Zeile oder Spalte im 2D-Array anwenden müssen.
Regeln
- Die Eingabe besteht aus einem 2D-Array von Ganzzahlen und einer 1-indizierten Ganzzahl. Diese Ganzzahl repräsentiert die zu sortierende Zeile, wenn die Zahl positiv ist, oder die zu sortierende Spalte, wenn die Zahl negativ ist (oder umgekehrt). Beispiel: Bei einem gegebenen
4x3
Array (Zeilen x Spalten) können Sie die zweite Spalte mit einem-2
Argument oder die dritte Zeile mit einem3
Argument sortieren . Dieses zweite Argument wird niemals Null sein und sein absoluter Wert wird niemals größer sein als die entsprechende Dimension des Arrays. - Die Ausgabe erfolgt auch in Form eines 2D-Arrays mit ganzen Zahlen, wobei die erforderlichen Transformationen zum Sortieren der angegebenen Zeile oder Spalte angewendet werden. Alternativ können Sie das Array auch einfach in STDOUT schreiben.
- Das Ausgabearray enthält die angegebene Zeile oder Spalte in aufsteigender Reihenfolge. Beachten Sie nur, dass beim Vertauschen von zwei Zahlen in einer Reihe die gesamten Spalten, in denen die Zahlen liegen, vertauscht werden. Und wenn Sie zwei Zahlen in einer Spalte vertauschen müssen, werden die gesamten Zeilen, in denen die Zahlen liegen, vertauscht.
- In dem Fall, dass dieselbe Nummer mehrmals in der zu sortierenden Zeile / Spalte vorkommt, gibt es mehrere mögliche Lösungen, je nachdem, wie Sie die Werte vertauschen. Tun Sie dies entsprechend für die restlichen auszutauschenden Zeilen / Spalten.
Beispiele
Positive indices for rows and negative indices for columns
[5 8 7 6 [1 3 2 4
1 3 2 4 order by -3 (3rd column) --> 9 6 3 0
9 6 3 0] 5 8 7 6]
[5 8 7 6 [9 6 3 0
1 3 2 4 order by -4 (4th column) --> 1 3 2 4
9 6 3 0] 5 8 7 6]
[5 8 7 6 [5 7 8 6
1 3 2 4 order by 2 (2nd row) --> 1 2 3 4
9 6 3 0] 9 3 6 0]
[5 8 7 6 [6 7 8 5
1 3 2 4 order by 3 (3rd row) --> 4 2 3 1
9 6 3 0] 0 3 6 9]
[1 2 [1 2 [3 2
3 2] order by -2 (2nd column) --> 3 2] or 1 2] (both are valid)
[7 5 9 7 [5 7 7 9 [5 7 7 9
1 3 2 4 order by 1 (1st row) --> 3 1 4 2 or 3 4 1 2
9 6 3 0] 6 9 0 3] 6 0 9 3]
Das ist Code-Golf , also kann der kürzeste Code für jede Sprache gewinnen!
code-golf
array-manipulation
sorting
Charlie
quelle
quelle
Antworten:
R , 55 Bytes
Probieren Sie es online!
Weist den
+
Operator (eigentlich eine Funktion in R) derorder
Funktion zu, die die Indizes eines Vektors vom kleinsten zum größten zurückgibt. Dann ist es nur Array-Manipulation.quelle
R , 55 Bytes
Probieren Sie es online!
Alternative zur Antwort von ngm ; eine rekursive Funktion, die von DimChtz 'Antwort inspiriert wurde
quelle
Matlab,
736247 BytesProbieren Sie es online!
-11 Bytes dank @ Giuseppe.
-15 Bytes dank @LuisMendo.
quelle
Japt ,
1817 Bytesnegativ für Zeilen und positiv für Spalten
Probieren Sie es online!
quelle
U
es negativ ist - die vorherige 17-Byte-Version funktioniert jedoch.ß
, die automatisch angewendet wirdU
. Es könnte Probleme beim Übergeben von Literal-Strings geben, aber dennoch einen Vorschlag an das GitHub-Repo senden, um weitere Nachforschungen anzustellen.05AB1E ,
252414 BytesSatte -10 Bytes dank @Emigna .
Verwendet eine positive Ganzzahleingabe zum Sortieren der Zeilen, eine negative für Spalten.
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
diø}Σ¹Ä<è]¹diø
eine Untergruppe von Ihnen erhalten, daher veröffentliche ich keine separate Antwort.JavaScript (ES6), 90 Byte
Probieren Sie es online!
Wie?
JS hat keine native Umsetzungsmethode, daher müssen wir eine definieren:
Hauptfunktion:
quelle
MATL , 17 Bytes
Probieren Sie es online!
Oder überprüfen Sie alle Testfälle
Erläuterung
quelle
APL (Dyalog Classic) , 23 Byte
Probieren Sie es online!
quelle
Python 2 ,
71-70BytesProbieren Sie es online!
Wenn
n
negativ, werden die Zeilen nach Spalten sortiertn
.Ansonsten wird die Matrix transponiert, gleich sortiert und wieder zurücktransponiert.
quelle
Gelee , 12 Bytes
Probieren Sie es online!
quelle
C # (.NET Core) , 186 Byte
Probieren Sie es online!
Ungolfed:
Die Shift-Funktion wird zweimal verwendet, sodass eine Funktionsvariable Platz spart. Die Funktion durchläuft die horizontale Dimension des Arrays im Index und fügt jedes Element in diesem Index in jedem horizontalen Array einem neuen Ausgabearray (horizontal) hinzu - ähnlich wie in Arnouds JS-Lösung.
Jetzt ist die Reihenfolge einfach. Ordnen Sie das horizontale Array nach der Indexnummer (Argument -1) und verschieben Sie das Array optional vor und nach dem Sortieren.
Angesichts der Frage nach Arrays konvertieren wir einige Male zu Arrays (sehr, sehr verschwenderisch). Ich fühle mich ein bisschen albern, eine so wörtliche Sprache im Code Golf zu verwenden, hehe.
quelle
C # (.NET Core) ,
142/139138/135 Bytes (und noch ein -1 von Kevin)Probieren Sie es online!
Ungolfed:
Neuer All-Inline-Ansatz; Bei einer negativen Antwort werden die Arrays weiterhin nach Element-at-Index sortiert. Andernfalls wird eine Sammlung von Wert-Index-Paaren aus dem Array-at-Index erstellt und nach Wert sortiert. Dies erzeugt effektiv eine Sammlung von Indizes in der Reihenfolge, in der sie hinzugefügt werden müssen. Dann werden für jedes Array die Elemente an den vorbestimmten Positionen ausgewählt. Einiges an Code-Trimmen und hässliches, hässliches, hässliches ** lautloses Schluchzen **. Die Wiederverwendung von Eingabeparametern ist damit verbunden, und los geht's ... 142 Bytes.
Auch hier wird das Array-Argument strikt durchgesetzt, was einen erheblichen Mehraufwand für Aufrufe von .ToArray () bedeutet.
135 Bytes behaupten, nicht wahr ?! C # 7.2-Tupel mit abgeleiteten Werten würden zusätzliche drei Bytes kürzen, aber tio.run lässt dies nicht zu. Aus diesem Grund habe ich mich entschlossen, diese Antwort zur einfachen Überprüfung zu veröffentlichen.
quelle
(a,s)=>
kann ein currying seina=>s=>
.(s<0)?
braucht die Klammer nicht und-s-1
kann sein~s
. Versuchen Sie es online: 137 BytesJava (OpenJDK 8) , 326 Byte
Probieren Sie es online!
Nun Jungs, wurde diese Frage sehr frustrierend für mich, und ich habe meine Antwort zu wissen , ich war etwas zu vergessen, zum Glück haben wir Legenden wie Kevin Cruijssen aus , um uns hier zu helfen :)
Java (OpenJDK 8) , 281 Byte
Probieren Sie es online!
quelle
a->b->
statt(a,b)->
und das Entfernenreturn
-Anweisung, da Sie die Eingabe-Array modifizieren. 281 Bytes Trotzdem eine schöne Antwort. +1 von mir. Ich habe die Herausforderung in 05AB1E gemeistert, aber diesmal nicht einmal in Java ausprobiert. ;)Sauber , 95 Bytes
Probieren Sie es online!
quelle
Kotlin , 192 Bytes
Probieren Sie es online!
quelle
Ruby , 69 Bytes
Probieren Sie es online!
quelle
Rot ,
190 bis185 BytesProbieren Sie es online!
Erläuterung:
Meine aktuelle Lösung ist 175 Byte lang, funktioniert aber in TIO nicht. Hier ist es, normalyl in der roten Konsole zu arbeiten:
Rot , 175 Bytes
quelle
VBA (Excel), 205 Byte
Yay! Zweitlängste Byteanzahl! Ich habe nicht ganz verloren: D
Golf gespielt:
Dadurch werden alle Daten im geöffneten (aktiven) Arbeitsblatt mit UsedRange ... sortiert. Dies kann fehlerhaft sein, sollte jedoch nur Zellen enthalten, die bearbeitet wurden.
UnGolfed:
quelle
Sub d(a)
With Sheet1.Sort
.SortFields.Clear
.SortFields.Add IIf(a<0,Columns(Abs(a)),Rows(Abs(a)))
.SetRange Sheet1.UsedRange
.Orientation=(a<0)+2
.Apply
End With
End Sub
.SortFields
Definierten gibt, sodass Sie auch die.Sortfields.Clear
Linie entfernen können .Perl 6 , 43 Bytes
Probieren Sie es online!
Curry-Funktion.
Erläuterung
quelle
Physica , 45 Bytes
Sehr ähnlich zu Arnauld's JS Antwort .
Probieren Sie es online!
Wie es funktioniert?
Eine ausführlichere und visuellere Erklärung finden Sie in der verknüpften Antwort.
quelle
J , 32 Bytes
Probieren Sie es online!
Anmerkung: Das
g=.
des Hauptverbs zählt nicht.Eine explizite Version für dieselben Bytes
J , 32 Bytes
Probieren Sie es online!
quelle
Clojure, 91 Bytes
Argh,
apply map list
* 2.quelle