양의 정수를 입력으로 포함하는 비어 있지 않은 행렬 / 숫자 배열을 사용하십시오. 이 순서대로 첫 번째 행과 열의 합계를 반환 한 다음 두 번째 행과 열의 합계를 반환하고 더 이상 행이나 열이 없을 때까지 계속합니다.
입력이 다음과 같다고 가정하십시오.
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
. 이는 첫 번째 입력 값으로 그룹화 된 두 번째 입력의 합계를 계산합니다.
답변
답변
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은 바이트를 저장했습니다. 감사!