Wenn Sie eine unsortierte Liste eindeutiger, streng positiver Ganzzahlen haben, sortieren Sie sie minimal in eine 2D-Matrix. Es wird garantiert, dass die Eingabeliste eine zusammengesetzte Länge hat, was bedeutet, dass die Ausgabematrix nicht unbedingt quadratisch ist, sondern eine Größe n x m
mit hat n,m > 1
.
"Minimal sortieren" bedeutet hier:
- Sortieren Sie die Liste in aufsteigender Reihenfolge.
- Komprimieren Sie die Ausgabematrix so weit wie möglich - minimieren Sie die Summe der Abmessungen der Matrix (z. B. ist für
20
Eingabeelemente als Eingabe eine5x4
oder4x5
Ausgabematrix erforderlich und nicht eine2x10
). - Komprimieren Sie die sortierten Zahlen so weit wie möglich links oben in der Matrix, beginnend mit dem ersten Element in der sortierten Liste.
- Man kann sich das so vorstellen, als würde man die Liste sortieren und dann entlang der Antidiagonalen der Matrix aufteilen, beginnend mit der oberen linken Ecke.
Beispiele:
Für die Eingabe 1..20
wird entweder eine 5x4- oder eine 4x5-Matrix wie folgt ausgegeben:
1 2 4 7 11
3 5 8 12 15
6 9 13 16 18
10 14 17 19 20
1 2 4 7
3 5 8 11
6 9 12 15
10 13 16 18
14 17 19 20
Für den Eingangsausgang [3, 5, 12, 9, 6, 11]
ist ein 2x3 oder 3x2 wie folgt
3 5 9
6 11 12
3 5
6 9
11 12
Für die Eingabe [14, 20, 200, 33, 12, 1, 7, 99, 58]
ist die Ausgabe 3x3 wie folgt
1 7 14
12 20 58
33 99 200
Für die Eingabe sollte 1..10
der Ausgang 2x5 oder 5x2 sein, wie folgt
1 2 4 6 8
3 5 7 9 10
1 2
3 4
5 6
7 8
9 10
Für die Eingabe ist die [5, 9, 33, 65, 12, 7, 80, 42, 48, 30, 11, 57, 69, 92, 91]
Ausgabe 5x3 oder 3x5 wie folgt
5 7 11 33 57
9 12 42 65 80
30 48 69 91 92
5 7 11
9 12 33
30 42 57
48 65 80
69 91 92
Regeln
- Es kann davon ausgegangen werden, dass die Eingabe in den systemeigenen Ganzzahltyp Ihrer Sprache passt.
- Die Eingabe und Ausgabe kann durch jede bequeme Methode erfolgen .
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
quelle
15
.Antworten:
Jelly ,
242220 BytesProbieren Sie es online!
2 Bytes dank @ Jonathan Allan gespeichert .
Erläuterung
quelle
L%J¬TżṚ$
->LÆDżṚ$
sollte zwei retten, denke ichpSÞỤs
.Python 2 ,
160158153151 Bytes-2 Bytes dank Erik the Outgolfer
-2 Bytes dank Mr. Xcoder
Probieren Sie es online! oder Probieren Sie alle Testfälle aus
quelle
max(0,n-x)
für -2 Bytes verwenden.R
11095 BytesProbieren Sie es online!
Wie es funktioniert
Giuseppe hat mit den folgenden Tricks unglaubliche 15 (!) Bytes gespart
length(x)
durchsum(x|1)
(-1 Byte)floor()
wird:
ohnehin nicht als Abrundung benötigt (-7)^.5
ist kürzer alssqrt()
(-3)col(X) + row(X)
stattouter
(schön!)t(X)
- enttäuschend;)Originelle Lösung
Es würde ausgefallener aussehen , wenn
outer
es durch ersetztrow(X)+col(X)
würde, aber dazu müssteX
zuerst die Ausgabematrix initialisiert werden .Probieren Sie es online!
quelle
JavaScript (ES6), 172 Byte
Erläuterung
Testfälle
Code-Snippet anzeigen
quelle
Perl 5 , 132 Bytes
Probieren Sie es online!
Das Unterprogramm gibt ein 2D-Array zurück. Der TIO-Link enthält einen Fußzeilencode für die Anzeige der Testergebnisse.
quelle
Oktave , 151 Bytes
Verwenden von drei verschiedenen Arten von Schleifenkonstrukten.
Probieren Sie es online!
Abgerollt:
quelle
'
innnz(v')
erforderlich?'
nicht erforderlich ist, wenn ich den Bereichsausdruck z. B. an der Aufrufstelle1:20
um eckige Klammern ([1:20]
) setze (um daraus einen tatsächlichen Vektor zu machen). Offensichtlich erzeugt der Doppelpunktoperator in Octave keinen Vektor , sondern eine Bereichskonstante, die viel weniger Speicherplatz in Anspruch nimmt. Funktioniert aus irgendeinem Grundnnz()
nicht mit diesem Typ, aber wenn Sie die Bereichskonstante transponieren, erhalten Sie einen Vektor. Daher funktioniert dies auch mit dem Apostroph. Durch Aufrufen der Funktion mit einem tatsächlichen Vektor entfällt die Notwendigkeit für'
.nnz(1:20)
keine Arbeit tut , ist wahrscheinlich ein Fehler (max(1:20)
,sum(1:20)
etc sind gültig).nnz
. Willst du es selbst machen, oder soll ich?Schale , 15 Bytes
Dies funktioniert mit brachialer Gewalt, daher kann es bei längeren Testfällen zu einer Zeitüberschreitung kommen. Probieren Sie es online!
Erläuterung
quelle
C (gcc) , 269 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 233 Byte
Erläuterung
quelle
Java 10,
199188186 BytesProbieren Sie es online aus.
Basierend auf meiner Antwort hier .
Erläuterung:
quelle