젤리 , 25 23 21 바이트
AṂ×ṠṚ
LHŒRṗ2Ç€ḅLĠịFS€
온라인으로 사용해보십시오!
대체 버전, 19 바이트
AṂ×ṠṚ
LHŒRṗ2Ç€ĠịFS€
Ġ
중첩 배열에 대해 부적절하게 동작 했기 때문에 작동 하지 않았습니다 . 유일한 차이점은 작동 방법 에서 언급 한 [q, p] 쌍 은 정렬 하기 전에 p + nq 에 매핑하는 대신 사전 식으로 정렬한다는 것입니다 .
온라인으로 사용해보십시오!
배경
먼저 요소를 좌표로 바꾸고 왼쪽과 아래쪽으로 늘리고 행렬 중앙에 (0, 0) 을 배치 합니다.
7x7 행렬 M의 경우 다음 좌표를 얻습니다.
(-3,-3) (-3,-2) (-3,-1) (-3, 0) (-3, 1) (-3, 2) (-3, 3)
(-2,-3) (-2,-2) (-2,-1) (-2, 0) (-2, 1) (-2, 2) (-2, 3)
(-1,-3) (-1,-2) (-1,-1) (-1, 0) (-1, 1) (-1, 2) (-1, 3)
( 0,-3) ( 0,-2) ( 0,-1) ( 0, 0) ( 0, 1) ( 0, 2) ( 0, 3)
( 1,-3) ( 1,-2) ( 1,-1) ( 1, 0) ( 1, 1) ( 1, 2) ( 1, 3)
( 2,-3) ( 2,-2) ( 2,-1) ( 2, 0) ( 2, 1) ( 2, 2) ( 2, 3)
( 3,-3) ( 3,-2) ( 3,-1) ( 3, 0) ( 3, 1) ( 3, 2) ( 3, 3)
이제 각 좌표 쌍의 최소 절대 값을 계산하고 두 좌표의 부호에 곱하여 (i, j) 를 (sign (i) m, sign (j) m)에 매핑합니다 . 여기서 m = min (| i | , | j |) .
(-3,-3) (-2,-2) (-1,-1) ( 0, 0) (-1, 1) (-2, 2) (-3, 3)
(-2,-2) (-2,-2) (-1,-1) ( 0, 0) (-1, 1) (-2, 2) (-2, 2)
(-1,-1) (-1,-1) (-1,-1) ( 0, 0) (-1, 1) (-1, 1) (-1, 1)
( 0, 0) ( 0, 0) ( 0, 0) ( 0, 0) ( 0, 0) ( 0, 0) ( 0, 0)
( 1,-1) ( 1,-1) ( 1,-1) ( 0, 0) ( 1, 1) ( 1, 1) ( 1, 1)
( 2,-2) ( 2,-2) ( 1,-1) ( 0, 0) ( 1, 1) ( 2, 2) ( 2, 2)
( 3,-3) ( 2,-2) ( 1,-1) ( 0, 0) ( 1, 1) ( 2, 2) ( 3, 3)
동일한 쌍에 해당하는 행렬 요소를 합산해야합니다. 합의 순서를 결정하기 위해 각 쌍 (p, q) 을 p + nq에 매핑합니다 . 여기서 n 은 M 의 행 / 열 수입니다 .
-24 -16 -8 0 6 12 18
-16 -16 -8 0 6 12 12
-8 -8 -8 0 6 6 6
0 0 0 0 0 0 0
-6 -6 -6 0 8 8 8
-12 -12 -6 0 8 16 16
-18 -12 -6 0 8 16 24
합계의 순서는 정수의 순서에 해당하고 그 합계에 해당합니다.
작동 원리
LHŒRṗ2Ç€ḅLĠịFS€ Main link. Argument: M (matrix)
L Compute n, the length (number of rows) of M.
H Halve it.
ŒR Symmetric range; map t to [-int(t), ..., 0, int(t)].
ṗ2 Compute the second Cartesian power, yielding all pairs [i, j]
with -t ≤ i, j ≤ t.
Ç€ Map the helper link over the resulting array of pairs.
L Yield n.
ḅ Unbase; map each pair [q, p] to (p + nq).
Ġ Group the indices of the resulting array of n² integers by their
corresponding values, ordering the groups by the values.
F Flatten M.
ị Index into the serialized matrix.
S€ Compute the sum of each group.
AṂ×ṠṚ Helper link. Argument: [i, j] (index pair)
A Absolute value; yield [|i|, |j|].
Ṃ Minimum; yield m := min(|i|, |j|).
Ṡ Sign; yield [sign(i), sign(j)].
× Multiply; yield [p, q] := [sign(i)m, sign(j)m].
Ṛ Reverse; yield [q, p].