행렬을 두 번 재정렬 다 출력하는 한

넌 스퀘어 주어진 행렬 하고리스트 (또는 벡터) 길이 숫자 함유 통해 (또는 내지 ). 당신의 작업은 열 순서를 변경하는 것입니다 행렬의 행 지정된 순서에 따라 .

×

에이

1

0

1

에이

되었으므로 매트릭스 구성 것이다 여기서, 번째 요소는 인 의 번째 요소 . 또한이 동작의 역을 출력해야합니다. 즉,의 (i, j) 번째 원소 위치에서 끝날 것이다 새로운 행렬에서 .

(나는,j)

((나는),(j))

에이

에이

((나는),(j))

기음

예를 들어, 주어진

에이=[111213212223313233],=[12]

출력은

=[333132131112232122],기음=[222321323331121311]

기본 I / O 방법을 통해 입력 및 출력을 수행 할 수 있습니다. 둘 다 출력하는 한 또는 C 인 행렬을 지정할 필요가 없습니다 . A 에 양의 정수만 포함 한다고 가정 하고 u에 1 또는 0 기반 색인을 사용할 수 있습니다 . 최소한 크기 64 \ times 64 까지의 행렬을 지원해야합니다 .

기음

에이

64×64

===== Input =====
A =
 35     1     6    26    19    24
  3    32     7    21    23    25
 31     9     2    22    27    20
  8    28    33    17    10    15
 30     5    34    12    14    16
  4    36    29    13    18    11
u=
  3 5 6 1 4 2

==== Output =====
B =
  2    27    20    31    22     9
 34    14    16    30    12     5
 29    18    11     4    13    36
  6    19    24    35    26     1
 33    10    15     8    17    28
  7    23    25     3    21    32
C =
 17    15     8    10    28    33
 13    11     4    18    36    29
 26    24    35    19     1     6
 12    16    30    14     5    34
 21    25     3    23    32     7
 22    20    31    27     9     2



답변

R , 42 바이트

function(A,o)list(A[o,o],A[I<-order(o),I])

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

소요 AA와 matrix1 기반의 인덱스 o.


답변

MATL , 15 13 바이트

t3$)&Gw&St3$)

입력 uA.

출력은 B다음 C세퍼레이터없이 어떠한 모호성이 없다.

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

설명

t     % Take input u implicitly. Duplicate u
3$)   % Take input A implicitly. Index A with u as row and column indices
&G    % Push the two inputs again: u, A
w     % Swap
&S    % Push indices that would make u sorted. Call that v
t     % Duplicate v
3$)   % Index A with v as row as column indices. Display implcitly


답변

옥타브 , 33 바이트

@(A,u){A(u,u) A([~,v]=sort(u),v)}

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

오류를 수정하고 여러 바이트를 저장 한 Luis 에게 감사 합니다!

기본 인덱싱은 를 취소하는 순열과 같은 벡터 를 정의하여 두 작업 모두에서 작동합니다 . 즉, 이면 의 첫 번째 요소 는 2입니다. 1은 의 두 번째 위치에 있기 때문 입니다. 이는 Octave의 정렬 기능으로 수행됩니다.

V

=(,1,2)

V


답변

numpy가있는 Python 3 , 51 45 바이트

lambda m,p:[m[x][:,x]for x in(p,p.argsort())]

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

@xnor 덕분에 -6 바이트

이 함수는 numpy행렬과

0

에서

1

사이의 값을 갖는 순열 벡터의 두 가지 인수 를 사용합니다 .


답변

Wolfram Language (Mathematica) , 30 바이트

ii[[#,#]]&/@{#,Ordering@#}&

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

로 입력하십시오 f[A][u].


답변

PowerShell , 78 73 71 바이트

($A,$u=$args)|%{$A[$u]|%{''+$_[$u]}
$u=1..$u.count|%{$u.indexof($_-1)}}

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


답변

젤리 , 13 바이트

ŒJṁ⁸ịⱮ⁹,Ụ¤œị⁸

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