Ich habe einige Herausforderungen im Zusammenhang mit Matrizen geschrieben. Allen ist gemeinsam, dass ich ein Format wie das folgende verwende, um die Matrizen sowohl in Beispielen als auch in Testfällen darzustellen:
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
Dies ist wahrscheinlich ein umständliches Format in vielen Sprachen.
Herausforderung:
Schreiben Sie ein Programm / eine Funktion, die eine Matrix in der oben angegebenen Form als Eingabe annehmen kann (direktes Kopieren / Einfügen aus diesem Beitrag), und geben Sie dieselbe Matrix in allen drei anderen unten gezeigten herkömmlichen Formaten aus .
Das Eingabeformat:
Durch eine unterschiedliche Anzahl von Leerzeichen getrennte Zahlen und Zeilenumbrüche zur Darstellung von Zeilen (siehe Testfälle).
- Es kann nicht garantiert werden, dass die Anzahl der Leerzeichen zwischen den Zahlen übereinstimmt. Sie können jedoch davon ausgehen, dass die letzte Ziffer in jeder Spalte ausgerichtet ist (sofern dies hilfreich ist).
- Es kann sowohl Ganzzahlen als auch Gleitkommazahlen geben, und sie können positiv, negativ oder null sein. Eine Matrix enthält keine ganzen Zahlen und Gleitkommazahlen.
- Sie können davon ausgehen, dass keine Zahl länger als 10 Zeichen ist, einschließlich des Minus- und Dezimalpunkts für negative Gleitkommazahlen.
- Sie können davon ausgehen, dass in jeder Zeile und in jeder Spalte die gleiche Anzahl von Einträgen vorhanden ist.
- Es gibt keine leeren Eingabematrizen, aber es können einzelne Zahlen oder Matrizen mit nur einer Zeile oder Spalte vorhanden sein.
- In diesen Fällen können Sie zwischen den in den Testfällen gezeigten Ausgabeformaten wählen
Ihr Programm / Ihre Funktion muss die Eingabe verarbeiten, wenn sie direkt aus diesem Beitrag kopiert und in den Interpreter eingefügt wird (STDIN oder als Funktionsargument oder etwas Äquivalentes). Sie können beliebig viele Zeichen (Klammern, Anführungszeichen, Klammern) vor und / oder nach der Matrix einfügen, aber Sie müssen die Matrix als Zeichenfolge betrachten, die nicht geändert werden kann (einschließlich der Zeilenumbrüche).
Zur Verdeutlichung: Angenommen, Ihre Funktion / Ihr Programm wird aufgerufen f
und die Matrix lautet:
1 -2
3 5
6 7
Dann können Sie die Matrix wie folgt als Funktionsargumente angeben (und unendlich viele andere Optionen):
f(1 -2
3 5
6 7)
f([1 -2
3 5
6 7])
f("""1 -2
3 5
6 7""")
Wenn Ihre Sprache die kopierte / eingefügte Matrix in keiner Weise als Eingabe verwenden kann, müssen Sie leider eine andere Sprache auswählen.
Das Ausgabeformat:
Sie sollten die Matrix in den folgenden drei Formaten ausgeben (Reihenfolge spielt keine Rolle):
[[16, 2, 3, 13], [5, 11, 10, 8], [9, 7, 6, 12], [4, 14, 15, 1]]
{{16, 2, 3, 13}, {5, 11, 10, 8}, {9, 7, 6, 12}, {4, 14, 15, 1}}
[16, 2, 3, 13; 5, 11, 10, 8; 9, 7, 6, 12; 4, 14, 15, 1]
- Sie können die drei Ausgänge nach Belieben trennen (zB eine Newline)
- Sie müssen die Zahlen mit der gleichen Genauigkeit wie die Eingabe ausgeben (z. B. dürfen Sie die Anzahl der Dezimalstellen nicht kürzen und Ganzzahlen nicht als Gleitkommazahlen ausgeben).
- Die Leerzeichen sind Pflichtfelder
- Sie müssen
-
für negative Zahlen verwenden, nicht_
oder ähnlich.
Testfälle:
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
----
[[16, 2, 3, 13], [5, 11, 10, 8], [9, 7, 6, 12], [4, 14, 15, 1]]
{{16, 2, 3, 13}, {5, 11, 10, 8}, {9, 7, 6, 12}, {4, 14, 15, 1}}
[16, 2, 3, 13; 5, 11, 10, 8; 9, 7, 6, 12; 4, 14, 15, 1]
0.14778 0.27114 0.24415
0.45997 0.12287 0.67470
0.28945 0.37928 0.51887
----
[[0.14778, 0.27114, 0.24415], [0.45997, 0.12287, 0.6747], [0.28945, 0.37928, 0.51887]]
{{0.14778, 0.27114, 0.24415}, {0.45997, 0.12287, 0.6747}, {0.28945, 0.37928, 0.51887}}
[0.14778, 0.27114, 0.24415; 0.45997, 0.12287, 0.6747; 0.28945, 0.37928, 0.51887]
-0.0398301 0.2403455 -0.2253368 0.3565870 0.0605803 0.0830780
-0.3254422 -0.1185191 -0.2989537 0.1647319 0.3621135 0.2018815
-0.0022281 -0.3362287 -0.3568447 0.4419063 0.3801872 -0.2847033
---
[[-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780], [-0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815], [-0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033],]
{{-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780}, {-0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815}, {-0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033},}
[-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780; -0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815; -0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033]
0 4 1 0
0 0 -6 0
0 1 4 -3
2 0 0 8
0 0 0 0
----
[[0, 4, 1, 0], [0, 0, -6, 0], [0, 1, 4, -3], [2, 0, 0, 8], [0, 0, 0, 0]]
{{0, 4, 1, 0}, {0, 0, -6, 0}, {0, 1, 4, -3}, {2, 0, 0, 8}, {0, 0, 0, 0}}
[0, 4, 1, 0; 0, 0, -6, 0; 0, 1, 4, -3; 2, 0, 0, 8; 0, 0, 0, 0]
1
----
[1] (or [[1]])
{1} (or {{1}})
[1] (or 1)
1 2
----
[1, 2] (or [[1, 2]])
{1, 2} (or {{1, 2}})
[1, 2]
4
5
----
[[4], [5]]
{{4}, {5}}
[4; 5]
Ich bin voll und ganz bewusst diese , aber in dieser Herausforderung, das umständlichen E / A - Format ist der springende Punkt. Die Herausforderung besteht darin, die Ausgabe in einigen Sprachen zu formatieren, während das Lesen der Eingabe in anderen Sprachen am schwierigsten ist.
Bitte lassen Sie sich nicht entmutigen, wenn das Lesen der Beiträge schwierig ist. Diese Einsendungen könnten die interessantesten sein. Kurz ist nicht unbedingt das Gleiche wie beeindruckend. Und wie immer sind Erklärungen erwünscht!
Japt ,
6353 BytesDies kam bei 44 Bytes an, bevor ich bemerkte, dass der Abstand in der Ausgabe obligatorisch war.
Probier es aus
Erläuterung
quelle
Perl 5 , 71 Bytes
69 Byte Code +
-p0
Flags.Probieren Sie es online!
Erklärungen
s/^ *(.+)/[$1]/gm;
wird[]
um jede Zeile herum eingefügt, während die führenden Leerzeichen entfernt werden.s/\s+/, /g;
Ersetzt Leerzeichen und Zeilenumbrüche durch ein Komma und ein Leerzeichen.Die erste Ausgabe wird dann durch Umgeben mit Zahnspange erhalten:
[$_]
.Der zweite muss die geschweiften Klammern durch geschweifte Klammern (
y/[]/{}/r
) ersetzen und mit geschweiften Klammern umgeben"{" ... "}"
.Beim dritten
], [
werden durch ein Semikolon und ein Leerzeichen (s/], \[/; /gr
) ersetzt.Nachdem ich diese Lösung geschrieben habe, habe ich versucht, die Retina-Antwort von Martin Ender zu übernehmen, aber sie hat sich um 10 Byte verlängert ( TryItOnline ):
Für diese Version siehe Martins Antwort für die Erklärungen.
quelle
MATL , 60 Bytes
Probieren Sie es online!
Vielen Dank an Luis Mendo für das Abschneiden eines Viertels meines Bytecount in einer Meisterklasse im Chat.
Fügen Sie die Eingabe ein, gefolgt von einer leeren Zeile.
quelle
05AB1E ,
4544 BytesProbieren Sie es online!
Erste Ausgabe
Zweiter Ausgang
Dritte Ausgabe
quelle
Python 2 , 143 Bytes
Probieren Sie es online!
quelle
Javascript (ES6),
121110106 Bytes-15 Bytes dank @Shaggy und @Justin
Beispielcode-Snippet:
quelle
map(x=>x.trim().replace(/ +/g,", "))
anmap(x=>x.match(/\S+/g).join`, `)
.Python 2 ,
163152150145 Bytes-5 Bytes danke an Felipe Nardi Batista, der die Verwendung von Splats vorgeschlagen hat (sorry, ich brauche nur eine Entschuldigung, um dieses Wort zu sagen: P).
Probieren Sie es online!
quelle
Python 3 ,
184 178 174 173 169 163 * 157 *153 BytesEingabe- / Ausgabeformat: Ausgabe mit einem Leerzeichen zwischen den Matrizen und Eingabe mit diesem Funktionsaufruf (wie bei TIO gezeigt):
Dies ist die Funktion:
Probieren Sie es online!
* Dank @officialaimm wurden 6 Bytes gespeichert (von 169 auf 163 Bytes).
* 4 Bytes dank @FelipeNardiBatista gespeichert.
Erklärung nach weiterem Golfen zu kommen.
quelle
C 415 Bytes
Es ist ein Monster und waaayyyy zu lang, aber ich bin damit fertig. Sollte wahrscheinlich einen anderen Ansatz gewählt haben.
Probieren Sie es online!
Zweiter Testfall | Dritter Testfall | Vierter Testfall | Fünftes Testfall | Sechstes Testfall | Siebter Testfall
quelle
Jelly , 37 Bytes
Ein vollständiges Programm, das die drei Formate in drei Zeilen druckt.
Probieren Sie es online!
Wie?
quelle
V , 41 Bytes
Probieren Sie es online!
Erläuterung
quelle
R , 132 Bytes
Probieren Sie es online!
eine anonyme Funktion. Nimmt Eingaben wie
Sie werden in derselben Reihenfolge wie die Testfälle gedruckt, jedoch mit Leerzeichen als Trennzeichen.
Erläuterung:
Es tauscht zuerst die Leerzeichen mit
,
und speichert das Ergebnis alsy
. Dann tauscht es Zeilenumbrüche mit], [
, setzt[[
und]]
an beiden Enden und speichert das Ergebnis alsz
.Als nächstes wird mit und mit in
chartr
gewechselt[
{
]
}
z
.Schließlich nimmt
y
, tauscht es Zeilenumbrüche mit;
und setzt[
und]
an beiden Enden .Dann werden alle Ergebnisse in dieser Reihenfolge an übergeben
cat
der sie ausgedruckt, alle gut formatiert und durch ein einzelnes Leerzeichen getrennt werden.Mild ungolfed:
quelle
Java 8 mit Netbeans 8+, 209 Bytes
Count ist 208 aus dem Code plus 1 Byte, um ihn durch Drücken von auszuführen
F6
.Umständliche Antwort für umständliche Herausforderung: p
Wie benutzt man?
Fügen Sie diesen Code in Netbeans in eine Datei mit dem Namen ein
M.java
. Kopieren Sie dann die Matrix, die Sie verwenden möchten.""
Drücken Sie dann zwischen den beiden aufeinanderfolgenden Zeichenctrl
+v
wie es für die Herausforderung erforderlich ist.Drücken
F6
Sie jetzt ! Dadurch wird der Code kompiliert, ausgeführt und die erwarteten Matrixdarstellungen ausgegeben.quelle
\n
werden und das Ergebnis angezeigt wird Was du gesehen hast. Um ehrlich zu sein, ich verstehe es nicht ganz: sMathematica, 129 Bytes
Die dritte und vierte Zeile definieren zusammen eine reine Funktion, die eine Zeichenfolge als Eingabe verwendet. Wenn wir beispielsweise festlegen
f=Print...&
, wird der letzte Testfall wie folgt aufgerufen:Der Ausschnitt
Analysiert die Eingabezeichenfolge als Matrix (aus Zeichenfolgen - wir versuchen niemals, die Einträge als numerische Größen zu interpretieren) und konvertiert den resultierenden Ausdruck zurück in eine Zeichenfolge. Dadurch wird automatisch das Ausgabeformat mit geschweiften Klammern generiert. Anschließend werden
Print[#,n,#~r~{"{"->"[","}"->"]"},n,#~r~{"{{"->"[","}}"->"]","}, {"->"; "}]
das Ausgabeformat und die beiden anderen, durch Zeilenumbrüche getrennt, mit einfachen Regeln zum Ersetzen von Zeichenfolgen gedruckt.quelle
Pip ,
4946 Bytes45 Byte Code, +1 für
-r
Flag.Übernimmt die Eingabe von stdin. Probieren Sie es online!
Erläuterung
(Dieses Erklärungsformat fühlt sich für mich etwas verworren an. Lassen Sie mich wissen, wenn etwas keinen Sinn ergibt.)
quelle
SCALA, 590 Bytes
War schwer, aber ich denke ich bin damit fertig
Kurze Erklärung: Ich nehme Eingaben, die von dreifachen Anführungszeichen umgeben sind, und entferne dann nicht benötigte Leerzeichen. Teilen Sie die Zeichenfolge zweimal (einmal für Zeilen und einmal für Spalten). und ich drucke mit meinen drei Routinen. Es könnte möglich sein, eine Funktion zu definieren, die sich gegenseitig beeinflussen lässt, aber ich weiß nicht wie.
Probieren Sie es online!
quelle
05AB1E , 34 Bytes
Probieren Sie es online!
ε...}
wurde durchvy...})
auf TIO ersetzt, da es dort noch nicht gezogen wurde.quelle
C # (.NET Core) , 214 Byte
Probieren Sie es online!
Nimmt die Matrix als Zeichenfolge und gibt die drei Formate als einzelne Zeichenfolge zurück, die durch Zeilenumbrüche getrennt sind.
quelle
using System.Text.RegularExpressions
muss (nach meiner Zählung) 37 zusätzliche Bytes hinzufügen.Kohle , 38 Bytes
Probieren Sie es online! Hinweis: Leerzeichen am Ende. Link ist eine ausführliche Version des Codes. Charcoal verfügt über eine mehrzeilige Eingabemöglichkeit, die mit begrenzt wird
["""
und"""]
. Erläuterung:Das nimmt die Eingabe und bereitet sie vor, indem es sie in Zeilen aufteilt und die Trennzeichen normalisiert.
Dies behandelt die
[[ ... ], [ ... ]]
und{{ ... }, { ... }}
Fälle .Dies behandelt den
[ ... ; ... ]
Fall.Bevor ich ein Byte von der obigen Lösung ablegte, hatte ich zwei 39-Byte-Lösungen; das ist der andere:
Probieren Sie es online! Hinweis: Leerzeichen am Ende. Link ist eine ausführliche Version des Codes. Erläuterung:
quelle