回答:
×UŒDḢS
オンラインでお試しください!またはすべてのテストケースを確認する
×UŒDḢS Main link. Argument: M (matrix)
U Upend M, i.e., reverse each row.
, Pair M and upended M.
ŒD Yield all diagonals.
Ḣ Head; extract the first, main diagonal.
S Reduce by sum.
t!P!*Xds
入力フォーマットは
[-1, -8, 4; 4, 0 -5; -3, 5, 2]
オンラインでお試しください!または、すべてのテストケースを確認します。
t % Take input matrix implicitly. Duplicate
!P! % Flip matrix horizontally
* % Element-wise product
Xd % Extract main diagonal as a column vector
s % Sum. Display implicitly
[:+/(<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=
私は以前のソリューションをもっと気に入っていましたが、これははるかに短いです(基本的にはPythonソリューションと同じです):
f m=sum[r!!i*r!!(length m-i-1)|(i,r)<-zip[0..]m]
í*Å\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バイト