넌 스퀘어 주어진 행렬 하고리스트 (또는 벡터) 길이 숫자 함유 통해 (또는 내지 ). 당신의 작업은 열 순서를 변경하는 것입니다 및 행렬의 행 지정된 순서에 따라 .
되었으므로 매트릭스 구성 것이다 여기서, 번째 요소는 인 의 번째 요소 . 또한이 동작의 역을 출력해야합니다. 즉,의 (i, j) 번째 원소 위치에서 끝날 것이다 새로운 행렬에서 .
예를 들어, 주어진
출력은
기본 I / O 방법을 통해 입력 및 출력을 수행 할 수 있습니다. 둘 다 출력하는 한 또는 C 인 행렬을 지정할 필요가 없습니다 . A 에 양의 정수만 포함 한다고 가정 하고 u에 1 또는 0 기반 색인을 사용할 수 있습니다 . 최소한 크기 64 \ times 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
답변
답변
MATL , 15 13 바이트
t3$)&Gw&St3$)
입력 u
후 A
.
출력은 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의 정렬 기능으로 수행됩니다.
답변
numpy가있는 Python 3 , 51 45 바이트
lambda m,p:[m[x][:,x]for x in(p,p.argsort())]
@xnor 덕분에 -6 바이트
이 함수는 numpy
행렬과
에서
사이의 값을 갖는 순열 벡터의 두 가지 인수 를 사용합니다 .
답변
답변
PowerShell , 78 73 71 바이트
($A,$u=$args)|%{$A[$u]|%{''+$_[$u]}
$u=1..$u.count|%{$u.indexof($_-1)}}