지그재그 형 행렬 재구성


18

압축 알고리즘의 일부로 JPEG 표준은 교차 방향의 대각선을 따라 벡터로 행렬을 언 롤링합니다.

여기에 이미지 설명을 입력하십시오

당신의 임무는 롤링되지 않은 벡터를 행렬 치수와 함께 취해 해당 행렬을 재구성하는 것입니다. 예로서:

[1, 2, 5, 9, 6, 3, 4, 7, 1, 2, 8, 3], 4, 3

양보해야한다

[1 2 3 4
 5 6 7 8
 9 1 2 3]

반면 치수 6, 2

[1 2 6 3 1 2
 5 9 4 7 8 3]

규칙

치수 중 하나만 입력으로 선택할 수 있습니다. 개별 입력은 임의의 순서로 수행 될 수 있습니다. 주어진 벡터 길이에 대해 너비와 높이가 양수이고 유효한 것으로 가정 할 수 있습니다.

벡터 요소가보다 작은 양의 정수라고 가정 할 수 있습니다 10.

STDIN (또는 가장 가까운 대안), 명령 행 인수 또는 함수 인수를 통해 입력을 받고 STDOUT (또는 가장 가까운 대안), 함수 리턴 값 또는 함수 (out) 매개 변수를 통해 결과를 출력하는 프로그램 또는 함수를 작성할 수 있습니다.

입력 벡터는 편리하고 모호하지 않은 플랫리스트 또는 문자열 형식으로 제공 될 수 있습니다.

출력 행렬은 임의의 편리한 모호하지 않은 중첩 목록 또는 문자열 형식이거나 두 행렬 차원과 함께 단순 목록 일 수 있습니다. (또는 언어에 매트릭스 유형이있는 경우 물론 매트릭스 유형으로도 사용됩니다.)

표준 규칙이 적용됩니다.

테스트 사례

각 테스트 케이스는 형식 vector width height => matrix입니다.

[1] 1 1                        => [[1]]
[1 2 3 1] 2 2                  => [[1 2] [3 1]]
[1 2 3 1] 4 1                  => [[1 2 3 1]]
[1 2 5 9 6 3 4 7 1 2 8 3] 3 4  => [[1 2 3] [5 6 4] [9 7 8] [1 2 3]]
[1 2 5 9 6 3 4 7 1 2 8 3] 4 3  => [[1 2 3 4] [5 6 7 8] [9 1 2 3]]
[1 2 5 9 6 3 4 7 1 2 8 3] 6 2  => [[1 2 6 3 1 2] [5 9 4 7 8 3]]
[1 2 5 9 6 3 4 7 1 2 8 3] 12 1 => [[1 2 5 9 6 3 4 7 1 2 8 3]]
[1 2 5 9 6 3 4 7 1 2 8 3] 1 12 => [[1] [2] [5] [9] [6] [3] [4] [7] [1] [2] [8] [3]]

관련 도전

답변:


7

젤리, 18 13 바이트

pS€żị"¥pỤỤị⁵s

행 수, 열 수 및 단순 목록을 별도의 명령 줄 인수로 사용합니다.

내 코드는 트윈 챌린지의 코드와 거의 동일합니다 . 유일한 차이점은 추가 (지수의 순열을 뒤집는)와 s(출력을 2D 배열로 나누는) 것입니다.

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


4

MATL , 29 바이트

:!i:+-1y^8MtsQ/*-X:4#S2$S1GZC

입력되고 height, width, vector개행 문자에 의해 분리된다.

이것은 관련 도전에 대한 내 대답 의 코드 일부를 재사용합니다 .

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

설명

:!      % take number of rows, r, as input. Generate column vector [1;2;...;r]
i:      % take number of columns, c, as input. Generate row vector [1,2,...,c] 
+       % add with broadcast. Gives 2D array
-1      % push -1
y^      % duplicate previous 2D array. Compute -1 raised to that
8M      % push [1;2;...;r] again
tsQ/    % divide by its sum plus 1
*       % multiply
-       % subtract
X:      % linearize 2D array into column array
4#S     % sort and push the indices of the sorting. Gives a column vector
2$S     % take vector as input. Sort it according to previous column vector
1G      % push r
ZC      % reshape into columns of r elements

0

J, 24 바이트

]$({~[:/:@;[:<@|.`</.i.)

또한 그 도전/. 의 J 답변 에서 와 같이 사사를 사용하여 지그재그 화를 수행 합니다.

용법

입력은 LHS의 어레이와 [height, width]RHS 의 치수로 이루어 집니다.

   f =: ]$({~[:/:@;[:<@|.`</.i.)
   1 f 1 1
1
   1 2 3 1 f 2 2
1 2
3 1
   1 2 5 9 6 3 4 7 1 2 8 3 f 4 3
1 2 3
5 6 4
9 7 8
1 2 3
   1 2 5 9 6 3 4 7 1 2 8 3 f 3 4
1 2 3 4
5 6 7 8
9 1 2 3
   1 2 5 9 6 3 4 7 1 2 8 3 f 2 6
1 2 6 3 1 2
5 9 4 7 8 3
   1 2 5 9 6 3 4 7 1 2 8 3 f 1 12
1 2 5 9 6 3 4 7 1 2 8 3
   1 2 5 9 6 3 4 7 1 2 8 3 f 12 1
1
2
5
9
6
3
4
7
1
2
8
3

설명

]$({~[:/:@;[:<@|.`</.i.)  Input: list A (LHS), dimensions D (RHS)
                     i.   Range shaped to D
           [:<@|.`</.     Zigzagify that matrix
     [:   ;               Raze the boxes to get a zigzagify permutation
       /:@                Invert that permutation to get an unzigzagify permutation
   {~                     Apply that permutation to A
]                         Get D
 $                        Shape that permutation to D and return
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.