양의 정수로 된 행렬을 입력으로 취하고 행렬을 통해 대각선에 요소의 개별 합계를 출력하십시오.
대각선 아래로 오른쪽으로가는 선만 계산해야합니다. 아래 그림과 같이 왼쪽 아래 요소 만 포함 된 대각선으로 시작한 다음 그 위의 길이 두 대각선 (있는 경우) 등으로 시작해야합니다.
예:
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
입력 및 출력 형식은 항상 선택 사항입니다.
이것은 code-golf 이므로 각 언어에서 가장 짧은 제출이 이깁니다.
답변
하스켈 , 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을 추가하여 오른쪽으로 한 요소 s
와 t
함께 zipWith(+)
. 때문에 s
임의의 큰 수 있습니다, 우리는 패드가 t
추가하여 충분한 제로로 z
.
답변
매스 매 티카, 53 54 바이트
l=Length@#-1&;Tr@Diagonal[#,k]~Table~{k,-l@#,l@#&@@#}&
2D 배열을 입력으로 받아서 목록을 반환하는 순수한 기능. (엔트리는 정수 또는 짝수 일 필요는 없습니다.) 주 대각선 위 (또는 음수 인 경우 아래)의 대각선을 Diagonal[#,k]
반환합니다 . 입력 배열의 크기를 기준으로 필요한 대각선 범위를 계산합니다. 그리고 각 대각선의 항목을 합산합니다.k
k
{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)