Produit scalaire des diagonales


10

Ce défi est très simple. On vous donne en entrée une matrice carrée, représentée de façon saine, et vous devez sortir le produit scalaire des diagonales de la matrice.

Les diagonales en particulier sont la diagonale allant de haut à gauche à bas à droite et de haut à droite à bas à gauche.

Cas de test

[[-1, 1], [-2, 1]]  ->  -3
[[824, -65], [-814, -741]]  ->  549614
[[-1, -8, 4], [4, 0, -5], [-3, 5, 2]]  ->  -10
[[0, -1, 0], [1, 0, 2], [1, 0, 1]]  ->  1

Réponses:




2

Python, 47 octets

lambda x:sum(r[i]*r[~i]for i,r in enumerate(x))

Testez-le sur Ideone .


2

J, 21 19 octets

[:+/(<0 1)|:(*|."1)

Approche directe.

Enregistré 2 octets grâce à @ Lynn .

Usage

Le tableau d'entrée est mis en forme à l'aide de dimensions $ values.

   f =: [:+/(<0 1)|:(*|."1)
   f (2 2 $ _1 1 _2 1)
_3
   f (2 2 $ 824 _65 _814 _741)
549614
   f (3 3 $ _1 _8 4 4 0 _5 _3 5 2)
_10
   f (3 3 $ 0 _1 0 1 0 2 1 0 1)
1

Explication

[:+/(<0 1)|:(*|."1)    Input: matrix M
              |."1     Reverse each row of M
             *         Multiply element-wise M and the row-reversed M
    (<0 1)|:           Take the diagonal of that matrix
[:+/                   Sum that diagonal and return it=

[:+/(<0 1)|:(*|."1)est de 19 octets
Lynn


1

JavaScript (ES6), 45 octets

a=>a.reduce((r,b,i)=>r+b[i]*b.slice(~i)[0],0)
a=>a.reduce((r,b,i)=>r+b[i]*b[b.length+~i],0)


1

Mathematica, 17 octets

Tr[#~Reverse~2#]&


0

Clojure, 57 octets

#(apply +(map(fn[i r](*(r i)(nth(reverse r)i)))(range)%))

0

Haskell , 80 48 octets

J'ai aimé ma solution précédente plus, mais elle est beaucoup plus courte (fait essentiellement la même chose que la solution Python):

f m=sum[r!!i*r!!(length m-i-1)|(i,r)<-zip[0..]m]

Essayez-le en ligne!


0

J, 18 octets

<:@#{+//.@:(*|."1)

Explication:

           (     ) | Monadic hook
            *      | Argument times...
             |."1  | The argument mirrored around the y axis
     +//.@:        | Make a list by summing each of the diagonals of the matrix
    {              | Takes element number...
<:@#               | Calculates the correct index (size of the array - 1)

0

05AB1E , 5 octets

í*Å\O

Essayez-le en ligne ou vérifiez tous les cas de test .

Explication:

í        # Reverse each row of the (implicit) input-matrix
         #  i.e. [[-1,-8,4],[4,0,-5],[-3,5,2]] → [[4,-8,-1],[-5,0,4],[2,5,-3]]
 *       # Multiply it with the (implicit) input-matrix (at the same positions)
         #  i.e. [[-1,-8,4],[4,0,-5],[-3,5,2]] and [[4,-8,-1],[-5,0,4],[2,5,-3]]
         #   → [[-4,64,-4],[-20,0,-20],[-6,25,-6]]
  Å\     # Get the diagonal-list from the top-left corner towards the bottom-right
         #  i.e. [[-4,64,-4],[-20,0,-20],[-6,25,-6]] → [-4,0,-6]
    O    # Sum it (and output implicitly)
         #  i.e. [-4,0,-6] → -10
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.