Bei einem ganzzahligen Array von mindestens zwei Elementen wird der unten definierte Matrix-Vektor des Arrays ausgegeben .
Um den Matrix-Vektor zu berechnen , drehen Sie sich zuerst durch das Größeneingabearray n
, um eine Größenmatrix zu erstellen n x n
, wobei das erste Element des Arrays der Hauptdiagonale folgt. Dies bildet den Matrixteil. Drehen Sie für den Vektor das Eingabearray vertikal. Führen Sie dann eine normale Matrixmultiplikation durch. Der Ausgabevektor ist das Ergebnis.
Beispielsweise,
a = [1, 2, 3]
Drehen Sie zuerst das Array zweimal nach rechts, um eine Matrix zu erhalten, [3, 1, 2]
und [2, 3, 1]
stapeln Sie sie dann, um eine 3x3
Matrix zu bilden
[[1, 2, 3]
[3, 1, 2]
[2, 3, 1]]
Drehen Sie das Array anschließend vertikal, um den Vektor zu bilden
[[1, 2, 3] [[1]
[3, 1, 2] x [2]
[2, 3, 1]] [3]]
Führen Sie die übliche Matrixmultiplikation durch
[[1, 2, 3] [[1] [[1+4+9] [[14]
[3, 1, 2] x [2] = [3+2+6] = [11]
[2, 3, 1]] [3]] [2+6+3]] [11]]
Und die Ausgabe ist [14, 11, 11]
oder [[14], [11], [11]]
(Ihre Wahl, ob sie abgeflacht ist oder nicht).
Beispiel # 2
a = [2, 5, 8, 3]
[[2, 5, 8, 3] [[2] [[4+25+64+9] [[102]
[3, 2, 5, 8] x [5] = [6+10+40+24] = [80]
[8, 3, 2, 5] [8] [16+15+16+15] [62]
[5, 8, 3, 2]] [3]] [10+40+24+6]] [80]]
[102, 80, 62, 80]
Regeln
- Es kann davon ausgegangen werden, dass die Eingabe und Ausgabe in den systemeigenen Ganzzahltyp Ihrer Sprache passen.
- Die Ein- und Ausgabe kann in jedem beliebigen Format 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.
- Fügen Sie nach Möglichkeit einen Link zu einer Online-Testumgebung hinzu, damit andere Benutzer Ihren Code ausprobieren können!
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
quelle
(v*2)[i+j]
netter TrickPyth , 10 Bytes
Testsuite .
quelle
Gelee , 9 Bytes
Probieren Sie es online!
Eine Funktion, die ein vertikales Array zurückgibt. Als vollständiges Programm sieht es so aus, als würde es ein horizontales Array zurückgeben. Um ein horizontales Array zurückzugeben, müssen Sie dies
LḶN⁸ṙ×⁸S€
stattdessen tun .quelle
05AB1E , 11 Bytes
Probieren Sie es online!
quelle
Haskell , 49 Bytes
Probieren Sie es online!
Für eine Eingabe
v=[1,2]
iterate tail$v++v
ergibt die Liste[[1,2,1,2],[2,1,2],[1,2],[2],[],...]
fst<$>zip l v
ist das gleiche wietake(length v)l
und ergibt[[1,2,1,2],[2,1,2]]
sum.zipWith(*)v
wird auf jedes Element abgebildet, um das Vektor-Matrix-Zeilenprodukt zu erhalten.quelle
fst<$>zip l v
sehr.R ,
6662 BytesProbieren Sie es online!
quelle
Map(function(i)c(n[-(1:i)],n[1:i])%*%n,length(n<-scan()):1)
ist 3 Bytes kürzer; es wird nur eine Liste von Matrizen zurückgegeben.for(i in seq(n<-scan()))F=c(c(n[-(1:i)],n[1:i])%*%n,F);F[1:i]
hat 61 Bytes, ohne ein seltsames Ausgabeformat zurückzugeben.Mathematica, 35 Bytes
Probieren Sie es online!
-9 Bytes von @Not a tree
quelle
Most@FoldList[RotateRight,#,1^#].#&
. (Aber schöner Trick mitFold
stattNest
!)CJam , 17 Bytes
Probieren Sie es online!
quelle
GolfScript , 37 Bytes
Probieren Sie es online!
quelle
Python 3 + Anzahl , 68 Bytes
Probieren Sie es online!
quelle
J , 14 Bytes
Probieren Sie es online!
Erläuterung
quelle
1&|.
sind nicht binden Sie1
an|.
, eine Monade zu schaffen? Aber dann benutzt du diese Monade sowohl mit einem linken als auch mit einem rechten Argument, wobei das linke bestimmt, wie oft es angewendet wird. Was ist denn hier los?&
. Wenn es als verwendet wirdu n&f v
, wird es ausgeführt(n&f)^:u v
. Sehen Sie sich den unteren Rand der Bindung an, um mehr Teile davon zu sehen.#\.|."{]
, aber ich habe den kürzesten Wert angegeben, den ich zuerst gefunden habe, bevor ich Alternativen ausprobiert habe.APL, 17 Bytes
Erläuterung:
quelle
Oktave , 34 Bytes
Probieren Sie es online!
quelle
Haskell ,
565552 BytesProbieren Sie es online!
Dank @Laikoni ein Byte gespeichert
Drei Bytes gespeichert:
l++l
stattcycle l
quelle
zipWith(*)l$drop i$cycle l
.Schale , 11 Bytes
Probieren Sie es online!
Erläuterung
quelle
Oktave -
6748 BytesVielen Dank an Luis Mendo, der diesen Code um 19 Byte reduziert hat!
Hinweis: Dieser Code kann nur in Octave ausgeführt werden. MATLAB unterstützt keine Ausdrücke in Funktionen, die Variablen erstellen und gleichzeitig die Ausdrücke auswerten können, die sie erstellen.
Der Originalcode in MATLAB ist hier zu finden, kann aber in jeder Version von MATLAB ausgeführt werden. Dieser Code ist 67 Bytes:
Erläuterung
a=input('');
- Erhält einen (Zeilen-) Vektor vom Benutzer über die Standardeingabe. Sie müssen den Vektor in Oktavform eingeben[1,2,3]
.n=numel(...);
- Ermittelt die Gesamtzahl der Elemente im Eingabevektor.x=0:n-1
- Erstellt einen Zeilenvektor, der von0
bis zun-1
in Schritten von 1 erhöht wird .(x=0:n-1)-x'
- Führt Rundsendungen aus, sodass wir einen x n
Matrix haben, sodass jede Zeilei
Elemente von 0 bis zu sind,n-1
wobei jedes Element in der Zeile voni
subtrahiert wirdi
.mod(..., n)+1
- Stellt sicher, dass alle negativen Werten
so umbrochen werden, dass jede Zeilei
den Vektor von 0 bisn-1
kreisförmig nach links verschoben enthälti
Elemente enthält. Wir addieren 1, wenn MATLAB / Octave Vektoren oder Matrizen mit 1 indiziert.a(...)
- Erstellt einen x n
Matrix, in der mit (4) auf die korrekten Indizes des Eingabevektors zugegriffen wird, die von jedem Wert aus (4) vorgegeben werden, wodurch die von uns benötigte Matrix erhalten wird.(...)*a'
- Führt eine Matrixvektormultiplikation durch Transponieren / Kippen durcha
, um vor der Multiplikation einen Spaltenvektor zu erhalten.Beispielläufe
Probieren Sie es online!
quelle
bsxfun
. Das Definierenn
ohne-1
spart auch ein paar Bytes. Und wenn Sie sich auf Octave beschränken, können Sie Variablen im laufenden Betrieb zuweisena
und weitere speichern . Komme auch öfter hierher !! :-D0:n
input
Funktion ist ein großartiger Trick. Ich hätte nicht gedacht, dass es das unterstützen könnte. Ich habe es aus eigener Erfahrung nur in C oder C ++ gesehen. Vielen Dank!Javascript 79 Bytes
Nimmt ein Eingabearray auf und gibt ein Array des Matrixvektors aus
Erläuterung
quelle
Clojure, 80 Bytes
iterate
erzeugt eine unendliche Sequenz, aber anstatt sie(take (count %) (iterate ...))
zu stoppen, verwende ich%
als zusätzliches Argument fürmap
.quelle
Perl 5 , 65 + 1 (-a) = 66 Bytes
Probieren Sie es online!
Nimmt den Eingabevektor als durch Leerzeichen getrennte Zahlen. Gibt durch Zeilenvorschub getrennte Zahlen aus, die den Ergebnisvektor darstellen.
quelle
C (gcc) 126 Bytes
Probieren Sie es online!
Ein Array kann in der Eingabe als Zeiger und Länge dargestellt werden.
quelle
Common Lisp, 78 Bytes
Probieren Sie es online!
Verdoppeln Sie das Array (in diesem Fall eine Lisp-Liste) und durchlaufen Sie die Unterlisten mit
i
(mitx
, bisy
, stoppen Sie die Iteration). Berechnen Sie dann das nächste Element des Ergebnisses, indem Sie das Ergebnis der Multiplikation jedes Elementsx
mit jedem Element von aufsummiereni
(stoppen Sie erneut, wenn die kürzere Liste beendet ist).quelle