Herausforderung:
Nehmen Sie eine Liste, L mit positiven ganzen Zahlen als Eingabe:
3 5 2 1 6
und erstellen Sie eine Matrix, in der die n-te Spalte den Vektor 1: L (n) enthält , wobei kürzere Zeilen mit Nullen aufgefüllt werden.
Testfälle:
3 5 2 1 6
-----------------
1 1 1 1 1
2 2 2 0 2
3 3 0 0 3
0 4 0 0 4
0 5 0 0 5
0 0 0 0 6
1
-
1
1 2 3 4 3 2 1
-------------------------
1 1 1 1 1 1 1
0 2 2 2 2 2 0
0 0 3 3 3 0 0
0 0 0 4 0 0 0
Regeln:
- Optionale Eingabe- und Ausgabeformate
- Listenliste ist ein akzeptables Ausgabeformat
- Die Matrix muss so klein wie möglich sein (Sie dürfen sie nicht mit mehr Nullen als nötig auffüllen)
- Der kürzeste Code in jeder Sprache gewinnt
- Erklärungen sind ausdrücklich erwünscht
Antworten:
R ,
4038 BytesProbieren Sie es online!
Erläuterung:
outer
Wendet sein drittes Argument (die Funktion) auf alle Elementkombinationen seiner ersten beiden Argumente an und generiert eine Matrix vonTRUE
undFALSE
wobei jede Spalte enthält,TRUE
wo1:max(l)
kleiner oder gleich dem entsprechenden Element vonl
ist. Beispiell=c(3,5,2,1,6)
:Angenommen, die resultierende Matrix ist
A
dannA*m
->,A[i,j]=A[i,j]*i
wasTRUE
auf 1 undFALSE
auf 0 zwingt und das gewünschte Ergebnis erzeugt.quelle
function(l)
mitl=scan();
print
damit ich diese Bytes verliere.source(...,echo=TRUE)
und das Lesen von stdin als volles Programm, wenn Sie einen alternativen Vorschlag haben zu einem R-Konsens über vollständige Programme und es steht vorerst.MATL , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python 3 , 54 Bytes
Probieren Sie es online!
quelle
Mathematica, 20 Bytes
Enthält U + F3C7 (eingebaute Mathematica-
Transpose
Funktion)Probieren Sie es auf Wolfram Sandbox
Verwendung
Erläuterung
quelle
Oktave , 26 Bytes
Anonyme Funktion, die einen Zeilenvektor eingibt und eine Matrix ausgibt.
Probieren Sie es online!
Erläuterung
Betrachten Sie die Eingabe
x = [3 5 2 1 6]
. Dies ist ein Zeilenvektor der Größe 1 × 5.1:max(x)
gibt den Zeilenvektor an[1 2 3 4 5 6]
, der der Variablen zugeordnet isty
.Die Transponierte davon, dh der Spaltenvektor
[1; 2; 3; 4; 5; 6]
, wird<=
(elementweise mit Broadcast) mit der Eingabe verglichen[3 5 2 1 6]
. Das Ergebnis ist die 6 × 5-MatrixSchließlich ergibt das Multiplizieren (elementweise mit Rundsendung) mit dem Spaltenvektor
[1; 2; 3; 4; 5; 6]
, der wiey
transponiert erhalten wird, das gewünschte Ergebnis:quelle
05AB1E , 4 Bytes
Probieren Sie es online! oder als schön formatierte Testsuite
quelle
Schale , 4 Bytes
Gibt eine Liste von Listen zurück
Probieren Sie es online!
Erläuterung
quelle
Pyth , 6 Bytes
Probieren Sie es hier aus! oder Überprüfen Sie alle Testfälle (mit Pretty-Print)!
Erläuterung
Eine nicht eingebaute transponierte Version wäre :
Das funktioniert wie folgt:
quelle
Gelee , 3 Bytes
Probieren Sie es online!
Erläuterung
quelle
Eigentlich 17 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Pyke , 3 Bytes
Dies nutzt die neue Funktion von Pyke, Hex-Codierungen ... Das Beste daran ist, dass wir Jelly binden! Rohe Bytes:
Probieren Sie es hier aus!
Das ASCII-Pyke-Äquivalent wäre 4 Bytes :
Wie?
Hier ist eine hübsche Druckversion mit ASCII, und hier ist eine mit Hex-Codierungen.
quelle
Perl 6 , 39 Bytes
Versuch es
Erweitert:
Beachten Sie, dass
zip
der Vorgang beendet wird, sobald die Liste der kürzesten Eingaben erschöpft ist.quelle
C # , 136 Bytes
Daten
Int32[]
i
Ein Array von IntsInt32[,]
Ein bidimentionales Array.Golf gespielt
Ungolfed
Ungolfed lesbar
Vollständiger Code
Releases
136 bytes
- Anfangslösung.Anmerkungen
quelle
C (gcc) , 142 Bytes
Probieren Sie es online!
quelle
Java 10, 115 Bytes
Erläuterung:
Probieren Sie es online aus.
quelle
Perl 5 , 62 + 1 (
-a
) = 63 BytesProbieren Sie es online!
quelle
Proton , 38 Bytes
Probieren Sie es online!
quelle
Add ++ , 37 Bytes
Probieren Sie es online!
quelle
JavaScript (Node.js) , 55 Byte
Probieren Sie es online!
JavaScript (Node.js) , 63 Byte
Probieren Sie es online!
quelle