Étant donné un tableau entier d'au moins deux éléments, affichez le vecteur matrice (défini ci-dessous) du tableau.
Pour calculer le vecteur matriciel , faites d'abord pivoter le n
tableau d'entrée de taille pour créer une matrice de taille n x n
, le premier élément du tableau suivant la diagonale principale. Cela forme la partie matrice. Pour le vecteur, retournez le tableau d'entrée verticalement. Effectuez ensuite une multiplication matricielle normale. Le vecteur de sortie est le résultat.
Par exemple,
a = [1, 2, 3]
En premier lieu , faire tourner la matrice deux fois vers la droite, pour obtenir [3, 1, 2]
et [2, 3, 1]
, ensuite les empiler pour former une 3x3
matrice
[[1, 2, 3]
[3, 1, 2]
[2, 3, 1]]
Ensuite, retournez le tableau verticalement pour former le vecteur
[[1, 2, 3] [[1]
[3, 1, 2] x [2]
[2, 3, 1]] [3]]
Effectuer la multiplication matricielle habituelle
[[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]]
Et la sortie est [14, 11, 11]
ou [[14], [11], [11]]
(votre choix d'aplatir ou non).
Exemple # 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]
Règles
- L'entrée et la sortie peuvent être supposées correspondre au type d'entier natif de votre langue.
- L'entrée et la sortie peuvent être données dans n'importe quel format pratique .
- Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
- Si possible, veuillez inclure un lien vers un environnement de test en ligne afin que d'autres personnes puissent essayer votre code!
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
la source
(v*2)[i+j]
belle astucePyth , 10 octets
Suite de tests .
la source
Gelée , 9 octets
Essayez-le en ligne!
Une fonction qui renvoie un tableau vertical. En tant que programme complet, il semble qu'il renvoie un tableau horizontal. Pour retourner un tableau horizontal, vous le feriez à la
LḶN⁸ṙ×⁸S€
place.la source
05AB1E , 11 octets
Essayez-le en ligne!
la source
Haskell , 49 octets
Essayez-le en ligne!
Pour une entrée
v=[1,2]
iterate tail$v++v
donne la liste[[1,2,1,2],[2,1,2],[1,2],[2],[],...]
fst<$>zip l v
est le même quetake(length v)l
et donne[[1,2,1,2],[2,1,2]]
sum.zipWith(*)v
est mappé sur chaque élément et pour produire le produit de ligne à matrice vectorielle.la source
fst<$>zip l v
beaucoup.R ,
6662 octetsEssayez-le en ligne!
la source
Map(function(i)c(n[-(1:i)],n[1:i])%*%n,length(n<-scan()):1)
est de 3 octets plus courte; il renvoie juste une liste de matrices.for(i in seq(n<-scan()))F=c(c(n[-(1:i)],n[1:i])%*%n,F);F[1:i]
fait 61 octets sans retourner un format de sortie étrange.Mathematica, 35 octets
Essayez-le en ligne!
-9 octets de @Pas un arbre
la source
Most@FoldList[RotateRight,#,1^#].#&
. (Mais bon truc en utilisant à laFold
place deNest
!)CJam , 17 octets
Essayez-le en ligne!
la source
GolfScript , 37 octets
Essayez-le en ligne!
la source
Python 3 + numpy , 68 octets
Essayez-le en ligne!
la source
J , 14 octets
Essayez-le en ligne!
Explication
la source
1&|.
pas lié1
à la|.
création d'une monade? mais ensuite vous utilisez cette monade avec un argument à gauche et à droite, celui de gauche déterminant le nombre de fois où il est appliqué. Que se passe t-il ici?&
. Lorsqu'il est utilisé en tant queu n&f v
, il est performant(n&f)^:u v
. Voir le bas du lien pour en voir plus d'analyses.#\.|."{]
, mais j'ai publié le plus court que j'ai trouvé avant d'essayer des alternatives.APL, 17 octets
Explication:
la source
Octave , 34 octets
Essayez-le en ligne!
la source
Haskell ,
565552 octetsEssayez-le en ligne!
Un octet enregistré grâce à @Laikoni
Trois octets enregistrés:
l++l
au lieu decycle l
la source
zipWith(*)l$drop i$cycle l
.Husk , 11 octets
Essayez-le en ligne!
Explication
la source
Octave -
6748 octetsMerci à Luis Mendo d'avoir réduit ce code de 19 octets!
Remarque: ce code ne peut être exécuté qu'en octave. MATLAB ne prend pas en charge les expressions à l'intérieur des fonctions qui peuvent créer des variables tout en évaluant simultanément les expressions qui les créent.
Le code d'origine dans MATLAB peut être trouvé ici, mais peut être exécuté dans n'importe quelle version de MATLAB. Ce code fait 67 octets:
Explication
a=input('');
- Reçoit un vecteur (ligne) de l'utilisateur via une entrée standard. Vous devez saisir le vecteur sous forme d'octave (c'est-à-dire[1,2,3]
).n=numel(...);
- Obtient le nombre total d'éléments dans le vecteur d'entrée.x=0:n-1
- Crée un vecteur ligne qui augmente de0
jusqu'àn-1
par pas de 1.(x=0:n-1)-x'
- Effectue la diffusion de sorte que nous ayons unen x n
matrice de sorte que chaque lignei
soit des éléments de 0 àn-1
chaque élément de la lignei
soustrait pari
.mod(..., n)+1
- Garantit que toutes les valeurs négatives s'enroulent autour den
sorte que chaque lignei
contienne le vecteur de 0 à décalén-1
circulairement vers la gauche pari
éléments. Nous ajoutons 1 lorsque MATLAB / Octave commence l'indexation des vecteurs ou matrices par 1.a(...)
- Crée unen x n
matrice où en utilisant (4), nous accédons aux indices corrects du vecteur d'entrée dictés par chaque valeur de (4), obtenant ainsi la matrice dont nous avons besoin.(...)*a'
- Effectue la multiplication des vecteurs matriciels par transposition / retournementa
pour devenir un vecteur colonne avant de faire la multiplication.Exemples d'exécutions
Essayez-le en ligne!
la source
bsxfun
. La définitionn
sans-1
enregistre également quelques octets. Et si vous vous limitez à Octave, vous pouvez assignera
et0:n
à des variables à la volée et en économiser davantage . Aussi, venez ici plus souvent !! :-Dinput
fonction est également une excellente astuce. Je ne pensais pas que cela pourrait soutenir cela. Je ne l'ai vu qu'en C ou C ++ d'après ma propre expérience. Merci!Javascript 79 octets
Prend un tableau d'entrée et sort un tableau du vecteur de matrice
Explication
la source
Clojure, 80 octets
iterate
produit une séquence infinie, mais au lieu d'utiliser(take (count %) (iterate ...))
pour l'arrêter, j'utilise%
comme argument supplémentaire pourmap
.la source
Perl 5 , 65 + 1 (-a) = 66 octets
Essayez-le en ligne!
Prend le vecteur d'entrée comme des nombres séparés par des espaces. Produit des nombres séparés par des sauts de ligne représentant le vecteur de résultat.
la source
C (gcc) , 126 octets
Essayez-le en ligne!
Un tableau peut être représenté en entrée sous la forme d'un pointeur et d'une longueur.
la source
Lisp commun, 78 octets
Essayez-le en ligne!
Doublez le tableau (dans ce cas une liste Lisp) et parcourez les sous-listes avec
i
(en utilisantx
, à traversy
, pour arrêter l'itération). Ensuite, calculez l'élément suivant du résultat en additionnant le résultat de la multiplication de chaque élément dex
avec chaque élément dei
(arrêt à nouveau lorsque la liste la plus courte est terminée).la source