첫 번째 행과 열의 합, 두 번째 행과 열의 합 … 등 계속합니다. 입력이 다음과

양의 정수를 입력으로 포함하는 비어 있지 않은 행렬 / 숫자 배열을 사용하십시오. 이 순서대로 첫 번째 행과 열의 합계를 반환 한 다음 두 번째 행과 열의 합계를 반환하고 더 이상 행이나 열이 없을 때까지 계속합니다.

입력이 다음과 같다고 가정하십시오.

2   10   10    2    4
9    7    7    2    9
1    7    6    2    4
7    1    4    8    9

그런 다음 출력은 다음과 같아야합니다.

45, 33, 16, 17

왜냐하면 : 2+9+1+7+10+10+2+4=45, 7+7+1+7+2+9=33, 6+4+2+4=16, 8+9=17.

테스트 사례 :

테스트 사례는 다음 형식으로되어 있습니다.

Input
---
Output
5
---
5
..........

1  4
----
5
..........

7
2
---
9
..........

 8    3    7   10    3    7   10    1
10    7    5    8    4    3    3    1
 1    6    4    1    3    6   10    1
 2    3    8    2    8    3    4    1
---
62   40   33   18
..........

30    39    48     1    10    19    28
38    47     7     9    18    27    29
46     6     8    17    26    35    37
 5    14    16    25    34    36    45
13    15    24    33    42    44     4
21    23    32    41    43     3    12
22    31    40    49     2    11    20
---
320  226   235   263   135    26    20
..........

7   10    1
4    4    2
6    3    4
1    4   10
5    7    6
---
34   20   20

배열로 :

[[5]]
[[1,4]]
[[7],[2]]
[[8,3,7,10,3,7,10,1],[10,7,5,8,4,3,3,1],[1,6,4,1,3,6,10,1],[2,3,8,2,8,3,4,1]]
[[30,39,48,1,10,19,28],[38,47,7,9,18,27,29],[46,6,8,17,26,35,37],[5,14,16,25,34,36,45],[13,15,24,33,42,44,4],[21,23,32,41,43,3,12],[22,31,40,49,2,11,20]]
[[7,10,1],[4,4,2],[6,3,4],[1,4,10],[5,7,6]]

이것은 이므로 각 언어에서 가장 짧은 솔루션이 승리합니다.



답변

MATL , 16 바이트

&n:w:!XlX:GX:1XQ

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

설명

예를 들어, 입력을 고려하십시오

2   10   10    2    4
9    7    7    2    9
1    7    6    2    4
7    1    4    8    9

이 코드 &n:w:!Xl는 열 벡터 [1; 2; 3; 4]와 행 벡터를 [1 2 3 4 5]만듭니다. 그런 다음 Xl브로드 캐스트로 최소 요소 단위를 계산하여 행렬을 제공합니다.

1 1 1 1 1
1 2 2 2 2
1 2 3 3 3
1 2 3 4 4

X:이 행렬을 (주요 순서대로) 열 벡터로 선형화합니다 [1; 1; 1; 1; 1; 2; 2; ... ; 4]. 로 얻은이 벡터와 선형화 된 입력 행렬 GX:accumarray(... @sum)함수의 입력으로 전달됩니다 1XQ. 이는 첫 번째 입력 값으로 그룹화 된 두 번째 입력의 합계를 계산합니다.


답변

젤리 , 3 바이트

ŒDS

온라인으로 사용해보십시오!

작동 원리

ŒDS

ŒD   diagonals
  S  vectorized sum

답변

CJam , 23 18 바이트

{[{(:+\z}h;]2/::+}

익명 블록은 스택에서 인수를 예상하고 결과를 스택에 남겨 둡니다.

온라인으로 사용해보십시오!

설명

[      e# Begin working in an array.
 {     e#  Do:
  (:+  e#   Remove the first row of the matrix and sum it.
  \z   e#   Bring the matrix back to the top and transpose it.
 }h    e#  While the matrix is non-empty.
 ;     e#  Discard the remaining empty matrix.
]      e# Close the array.
2/     e# Split it into consecutive pairs of elements (possibly with a singleton on the end).
::+    e# Sum each pair.

답변

05AB1E , 14 11 바이트

[ćOˆøŽ]¯2ôO

온라인으로 사용해보십시오!

설명

[   Ž ]       # loop until stack is empty
 ć            # extract the head
  Oˆ          # sum and add to global list
     ø        # transpose
       ¯      # push global list
        2ô    # split into pairs
          O   # sum each pair

답변

자바 스크립트 (ES6), 60 바이트

a=>a.map((b,y)=>b.map((c,x)=>r[x=x<y?x:y]=~~r[x]+c),r=[])&&r

순진한 해결책이 더 나은 방법 일 수 있습니다.


답변

Mathematica, 60 바이트

Luis Mendo의 MATL 답변에서 영감을 얻었습니다 .

Pick[#,Min~Array~d,n]~Total~2~Table~{n,Min[d=Dimensions@#]}&

설명 : Min~Array~Dimensions@#다음과 같은 행렬을 구성합니다.

1 1 1 1 1
1 2 2 2 2
1 2 3 3 3
1 2 3 4 4

그런 다음 위의 이상한 행렬 Pick[#,...,n]~Total~2의 숫자 n에 해당하는 입력 행렬의 항목을 골라 합계합니다. 마지막으로 ...~Table~{n,Min[d=Dimensions@#]}반복합니다 n.

이것은 순진 접근 방식보다 1 바이트 짧습니다.

{#[[n,n;;]],#[[n+1;;,n]]}~Total~2~Table~{n,Min@Dimensions@#}&

답변

하스켈, 50 49 바이트

f(a@(_:_):b)=sum(a++map(!!0)b):f(tail<$>b)
f _=[]

온라인으로 사용해보십시오!

하나 이상의 요소가있는 행이 하나 이상있는 경우 결과는 첫 번째 행과 다른 모든 행의 머리의 합과 다른 모든 행의 꼬리가있는 재귀 호출이됩니다. 다른 모든 경우 결과는 빈 목록입니다.

편집 : Ørjan Johansen은 바이트를 저장했습니다. 감사!