대각선 합 5 5

양의 정수로 된 행렬을 입력으로 취하고 행렬을 통해 대각선에 요소의 개별 합계를 출력하십시오.

대각선 아래로 오른쪽으로가는 선만 계산해야합니다. 아래 그림과 같이 왼쪽 아래 요소 만 포함 된 대각선으로 시작한 다음 그 위의 길이 두 대각선 (있는 경우) 등으로 시작해야합니다.

예:

Input:
 8   14    5    1
10    5    5    8
 6    6    8   10
15   15    4   11

Output:
15, 21, 20, 32, 29, 13, 1
(Diagonals: {{15},{6,15},{10,6,4},{8,5,8,11},{14,5,10},{5,8},{1}})

Input:
1
Output:
1

Input:
1 5
Output:
1, 5

Input:
4
1

Output:
1, 4

Input:
17    4    5
24   16    5
 9   24   10
 1   14   22
 1   21   24
 4    4   17
24   25   17

Output:
24, 29, 22, 39, 47, 70, 43, 9, 5

입력 및 출력 형식은 항상 선택 사항입니다.

이것은 이므로 각 언어에서 가장 짧은 제출이 이깁니다.



답변

하스켈 , 40 37 바이트

z=0:z
foldl1$(.(++z)).zipWith(+).(0:)

온라인으로 사용해보십시오! 사용법 : (foldl1$(.(++z)).zipWith(+).(0:)) [[1,2,3],[4,5,6]].

편집 : -3 바이트 Ørjan Johansen에게 감사합니다!

언 골프 드 :

z = 0:z
s#t = zipWith(+)(0:s)(t++z)
f m = foldl1 (#) m

z무한히 많은 0의 목록입니다. 에서 f우리는 목록의 목록을 통해 배 m기능과 함께 두 목록을 결합하여 #. 에서는 #제리스트 s지금까지 축적 된 열의 합을 포함하고, 상기 제리스트 t에 추가되어야하는 새로운 행이다. 우리는 이동 s앞 요소 현명한 추가로 0을 추가하여 오른쪽으로 한 요소 st함께 zipWith(+). 때문에 s임의의 큰 수 있습니다, 우리는 패드가 t추가하여 충분한 제로로 z.


답변

매스 매 티카, 53 54 바이트

l=Length@#-1&;Tr@Diagonal[#,k]~Table~{k,-l@#,l@#&@@#}&

2D 배열을 입력으로 받아서 목록을 반환하는 순수한 기능. (엔트리는 정수 또는 짝수 일 필요는 없습니다.) 주 대각선 위 (또는 음수 인 경우 아래)의 대각선을 Diagonal[#,k]반환합니다 . 입력 배열의 크기를 기준으로 필요한 대각선 범위를 계산합니다. 그리고 각 대각선의 항목을 합산합니다.kk{k,-l@#,l@#&@@#}Tr


답변

MATL , 6 바이트

T&XdXs

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

설명

T&Xd   % All diagonals of implicit input arranged as zero-padded columns
Xs     % Sum of each column. Implicitly display

답변

젤리 , 5 바이트

0;+µ/

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

작동 원리

0;+µ/  Main link. Argument: M (matrix / array of rows)

   µ   Combine all links to the left into a chain (arity unknown at parse time) and
       begin a new monadic chain.
    /  Reduce M by that chain. This makes the chain dyadic.
       Let's call the arguments of the chain L and R (both flat arrays).
0;         Prepend a 0 to L.
  +        Perform element-wise addition of the result and R.
           When the chain is called for the n-th time, R has n less elements, so
           the last n elements of L won't have matching elements in R and will be
           left unaltered.

답변

자바 스크립트 (ES6), 65 58 바이트

a=>a.map(b=>b.map((c,i)=>r[i]=~~r[i]+c,r=[,...r]),r=[])&&r

답변

CJam , 22 21 바이트

Martin Ender 덕분에 1 바이트 절약

{_,({0\f+}*ee::m<:.+}

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

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

작동 원리

_                   e# Duplicate the matrix
 ,(                 e# Get its length (# of rows) minus 1
   {0\f+}*          e# Prepend that many 0s to each row
          ee        e# Enumerate; map each row to [index, row]
            ::m<    e# Rotate each row left a number of spaces equal to its index
                :.+ e# Sum each column

답변

05AB1E , 17 바이트

Rvy¹gÅ0«NFÁ}})øO¨

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

설명

R                  # reverse input
 v                 # for each N,y (index, item)
  y¹gÅ0«           # pad y with as many zeroes as the number of rows in the input
        NFÁ}       # rotate each row N times right
            })     # wrap the result in a list
              øO   # sum the columns
                ¨  # remove the last element of the resulting list (the padded zeroes)