Sản phẩm chấm của đường chéo


10

Thử thách này rất đơn giản. Bạn được cung cấp dưới dạng đầu vào một ma trận vuông, được biểu diễn theo bất kỳ cách lành mạnh nào và bạn phải xuất sản phẩm chấm của các đường chéo của ma trận.

Các đường chéo cụ thể là các đường chéo chạy từ trên trái sang dưới phải và từ trên phải sang dưới trái.

Các trường hợp thử nghiệm

[[-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

Câu trả lời:




2

Python, 47 byte

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

Kiểm tra nó trên Ideone .


2

J, 21 19 byte

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

Phương pháp tiếp cận thẳng.

Đã lưu 2 byte nhờ @ Lynn .

Sử dụng

Mảng đầu vào được định hình bằng cách sử dụng 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

Giải trình

[:+/(<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)là 19 byte
Lynn


1

JavaScript (ES6), 45 byte

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)




0

Clojure, 57 byte

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


0

J, 18 byte

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

Giải thích:

           (     ) | 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 byte

í*Å\O

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

í        # 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.