이 질문에서 영감을 얻은
2D 이미지를 1D 문자열로 언 롤링하는 또 다른 방법은 Hilbert Curve 를 사용하는 것 입니다.
이 곡선에는 계산 중에 사용 된 반복 횟수에 따라 여러 버전이 있습니다. 아래는 1 차에서 5 차까지 힐버트 곡선의 예입니다.
이 곡선을 계산하는 방법은 다음과 같습니다. 먼저 1 차 힐버트 곡선을 그림에 표시된 것과 같이 정의합니다 (n = 1의 경우). 1x1 정사각형에 맞습니다. 우리는이 곡선의 복사본을 4x4 정사각형으로 4 개 복사하여 모두 왼쪽으로 "움푹 들어간 곳"을 나타냅니다. 그런 다음 가장 왼쪽에있는 1 개의 커브를 뒤집어 맨 위의 오목한 부분이 위쪽을 향하고 아래쪽의 아래쪽이 아래쪽을 향하도록합니다. 마지막으로 인접한 힐버트 커브의 모서리를 연결합니다. (n + 1) 차수 곡선을 얻으려면 4 개의 n 차수 곡선으로 프로세스를 반복하면됩니다. 여기서 프로세스의 시각화를 볼 수 있습니다 (프로세스를 자세히 설명하는 이미지도 추가하겠습니다).
이 과제의 임무는 해당 행렬에 대해 가장 낮은 차수의 힐버트 곡선 을 따라 정수 행렬을 풀어 내는 것입니다.
간단히하기 위해 행렬의 왼쪽 상단부터 시작하여 곡선을 만듭니다.
정수 목록으로 입력을 수신 할 수 있습니다. 여기서 각 하위 목록은 행렬의 행을 나타냅니다.
입력이 제곱 행렬 (n * n)이라고 가정 할 수 있습니다.
예를 들면 다음과 같습니다.
입력:
[[ 1, 2,]
[ 3, 4 ]]
산출:
[ 1, 2, 4, 3 ]
그림에 표시된 1 차 힐버트 커브를 사용하고 있기 때문에
입력:
[[ 1, 2, 3, 4, ]
[ 5, 6, 7, 8, ]
[ 9, 10, 11, 12, ]
[ 13, 14, 15, 16 ]]
산출:
[ 1, 5, 6, 2, 3, 4, 8, 7, 11, 12, 16, 15, 14, 10, 9, 13 ]
2 차 힐버트 커브 사용
평소와 같이 표준 허점은 허용되지 않습니다.
이것은 코드 골프이므로 바이트 단위의 최단 답변이 이깁니다.