소개
이 도전에서 당신은 대각선 Burrows-Wheeler 변환을 해결할 것입니다. 다음은 대각선 Burrows-Wheeler 변환의 일반적인 개요입니다. 메시지를 인코딩하려면 먼저 메시지 길이가 홀수임을 보장해야합니다 (예 : 5, 7, 9 등). 그런 다음, 격자를 만들기 n
로 n
하는 경우, n
메시지의 길이입니다. 첫 번째 행은 원본 메시지입니다. 그 뒤의 각 행은 그 위의 행이지만 첫 번째 문자가 뒤로 이동하면서 1 문자 왼쪽으로 이동했습니다. 예를 들면 다음과 같습니다.
Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
WorldHello
WorldHello
orldHello W
rldHello Wo
ldHello Wor
dHello Worl
그런 다음 NW에서 SE 대각선으로 각 문자를 가져 와서 새 문자열에 넣으십시오.
Hello World H
ello WorldH l
llo WorldHe o
lo WorldHel W
o WorldHell r
WorldHello d
WorldHello e
orldHello W l
rldHello Wo (space)
ldHello Wor o
dHello Worl l
인코딩 된 메시지는 HloWrdel ol
입니다. 디코딩하려면 먼저 인코딩 된 메시지의 길이를 취하고 1을 더한 다음 2로 나눕니다 x
. 이 번호를 호출 할 수 있습니다. 이제 x
첫 글자부터 시작하여 각 글자는 x
마지막 글자 다음에 반복됩니다. 예를 들면 다음과 같습니다.
H l o W r d e l o l
1
Then...
H l o W r d e l o l
1 2
And again...
H l o W r d e l o l
1 3 2
Until you get...
H l o W r d e l o l
1 3 5 7 9 11 2 4 6 8 10
이제 문자를 올바른 순서로 다시 정렬하십시오 Hello World
!
도전
두 가지 프로그램, 기능 또는 각각 하나를 작성해야합니다. 그러나 둘 다 동일한 언어를 사용해야합니다. 첫 번째 프로그램은 STDIN, 프로그램 인수 또는 함수 매개 변수를 통해 문자열을 입력으로 받아이 메소드를 사용하여 인코딩 합니다. 두 번째 프로그램은 STDIN, 프로그램 인수 또는 함수 매개 변수를 통해 문자열을 입력으로 받아 들여이 메소드를 사용하여 디코딩 합니다.
요구 사항
첫 번째 프로그램 / 기능
- 위에 나열된 방법을 사용하는 단일 문자열 입력
- 대각선 Burrows-Wheeler 변환 스타일을 사용하여 문자열을 인코딩해야합니다.
두 번째 프로그램 / 기능
- 위에 나열된 방법을 사용하는 단일 문자열 입력
- 대각선 Burrows-Wheeler 변환 스타일을 사용하여 문자열을 디코딩해야합니다.
제약
- 이 작업을 수행하는 내장 또는 외부 기능을 사용할 수 없습니다.
- 표준 허점은 허용되지 않습니다.
- 두 프로그램 / 기능 모두 동일한 언어로되어 있어야합니다.
채점
이것은 코드 골프이므로 바이트 단위의 가장 짧은 프로그램이 이깁니다.
더 많은 정보를 추가해야한다면 의견을 남겨주세요!