최적의 제곱 행렬 계산


13

최적 행렬 (이 도전 다소 좁은 범위에 대한)에 의해 얻어지는 「완봉」정방 행렬과 각 쌍의 최대 값을 얻는 상응하는 행과 열에서 엘리먼트.

예를 들어, 다음 행렬이 주어집니다.

4 5 6
1 7 2
7 3 0

그것을 전치와 결합하여 얻을 수 있습니다 : [[[4,5,6],[4,1,7]],[[1,7,2],[5,7,3]],[[7,3,0],[6,2,0]]]. 각 목록 쌍을 압축하면 다음이 제공 [[(4,4),(5,1),(6,7)],[(1,5),(7,7),(2,3)],[(7,6),(3,2),(0,0)]]됩니다.. 마지막 단계는 최적의 행렬을 얻기 위해 각 쌍의 최대 값을 얻는 것입니다.

4 5 7
5 7 3
7 3 0

당신의 임무는 입력으로 주어진 정사각형 행렬의 최적 행렬을 출력하는 것입니다. 행렬에는 정수만 포함됩니다. I / O는 합리적인 형식으로 수행 할 수 있습니다. 가장 짧은 바이트 코드 (UTF-8 또는 언어의 사용자 정의 인코딩)가 이깁니다!

테스트

[[172,29], [29,0]]-> [[172,29], [29,0]]
[[4,5,6], [1,7,2], [7,3,0]]-> [[4,5,7], [5,7,3], [7,3,0 ]]
[[1,2,3], [1,2,3], [1,2,3]]-> [[1,2,3], [2,2,3], [3,3,3 ]]
[[4,5, -6], [0,8, -12], [-2,2,4]]-> [[4,5, -2], [5,8,2], [- 2,2,4]]

플랫 버전의 행렬을 출력 할 수 있습니까? 예를 들어, [1,2,3,4]대신 [[1,2],[3,4]]? ~ 33 % 절약 할 것
wastl

답변:


7

젤리 , 2 바이트

»Z

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

작동 원리

»Z  Main link. Argument: M (integer matrix)

 Z  Zip the rows of M, transposing rows and columns.
»   Take the maxima of all corresponding integers.

세상에 왜 그렇게 »행동 하는거야 ?!

5
배열 조작 언어의 표준입니다. 옥타브도 max마찬가지입니다.
Dennis






2

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

m=>m.map((r,y)=>r.map((v,x)=>v>(k=m[x][y])?v:k))

테스트 사례




1

CJam , 8 바이트

{_z..e>}

스택에서 입력을 받아서 출력으로 대체하는 익명 블록 (함수).

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

설명

{      }    e# Define block
 _          e# Duplicate
  z         e# Zip
   .        e# Apply next operator to the two arrays, item by item
            e# (that is, to rows of the two matrices)
    .       e# Apply next operator to the two arrays, item by item
            e# (that is, to numbers of the two rows)
     e>     e# Maximum of two numbers

1

R , 23 바이트

function(A)pmax(A,t(A))

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

이것은 대부분의 다른 답변과 같습니다. 그러나 R에는 두 max가지 일반적인 시나리오에 대해 두 가지 고유 한 기능이 있습니다.

max그리고 min모든 논리적 또는 정수 경우 모든 숫자 경우 두 번, 그리고 문자로, 정수로, 그렇지 않으면 해당 인수에있는 모든 값의 최대 또는 최소를 반환합니다.

pmaxpmin인수로 하나 또는 그 이상의 벡터 (또는 매트릭스)를 받아 벡터의 '평행'최대 값 (또는 최소값)을 제공하는 단일 벡터를 리턴한다. 결과의 첫 번째 요소는 모든 인수의 첫 번째 요소의 최대 값 (최소값)이고 결과의 두 번째 요소는 모든 인수의 두 번째 요소의 최대 값 (최소값)입니다. 필요한 경우 짧은 길이의 입력 (0이 아닌 길이)이 재활용됩니다.



1

C (gcc) , 79 77 바이트

  • Steadybox 덕분에 2 바이트를 절약했습니다 . 이 챌린지의 모든 행렬이 정사각형이므로 하나의 행렬 차원 매개 변수 만 사용합니다.
j,i;f(A,n)int*A;{for(j=0;j<n*n;j++)printf("%d,",A[A[j]>A[i=j/n+j%n*n]?j:i]);}

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

플랫 정수형 배열 A과 행렬 차원 n(행렬이 정사각형이어야 함)을 입력으로받습니다. 플랫 정수 배열 문자열 표현을 stdout으로 출력합니다.



0

05AB1E , 7 바이트

ø‚øεøεà

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

설명

ø         # transpose input matrix
 ‚        # pair with original matrix
  ø       # zip together
   ε      # apply on each sublist ([[row],[transposed row]])
    ø     # zip
     ε    # apply on each sublist (pair of elements)
      à   # extract greatest element





당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.