Answers:
[:+/(<0 1)|:(*|."1)
直截了当的方法。
由于@ Lynn节省了2个字节。
输入数组使用进行整形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
[:+/(<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=
sum(diag(A*A[,ncol(A):1]))
<:@#{+//.@:(*|."1)
( ) | 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)
í*Å\O
说明:
í # 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
[:+/(<0 1)|:(*|."1)
是19个字节