배경
이동 대 앞쪽 변환 (MTF), 엔트로피 인코딩 기술의 성능을 개선하기위한 데이터 암호화 알고리즘이다.
에서 의 bzip2 압축 알고리즘 , 이것은 이후에인가된다 버로우즈 - 휠러 변환 (에서 본 버로우 휠러 백 ) 작고 쉽게 압축 이외의 정수로 반복되는 문자 그룹을 선회 목적으로.
정의
이 과제를 위해 MTF의 인쇄 가능한 ASCII 버전을 다음과 같이 정의합니다.
입력 문자열을 감안할 의 빈 배열이 걸릴 R , 문자열 D 각 문자에 대해 다음 인쇄 가능한 모든 ASCII 문자 (0x7E가에가 0x20)를 반복 C 의 S :
d 에서 c 의 인덱스 를 r 에 추가하십시오 .
이동 C를 전면에 D , 즉, 제거 C 에서 D 나머지에 붙일.
마지막으로 r 의 요소를 원래 d의 인덱스로 가져와 해당 문자를 가져옵니다.
단계별 예
INPUT: "CODEGOLF"
0. s = "CODEGOLF"
d = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = []
1. s = "ODEGOLF"
d = "C !\"#$%&'()*+,-./0123456789:;<=>?@ABDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35]
2. s = "DEGOLF"
d = "OC !\"#$%&'()*+,-./0123456789:;<=>?@ABDEFGHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47]
3. s = "EGOLF"
d = "DOC !\"#$%&'()*+,-./0123456789:;<=>?@ABEFGHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37]
4. s = "GOLF"
d = "EDOC !\"#$%&'()*+,-./0123456789:;<=>?@ABFGHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37 38]
5. s = "OLF"
d = "GEDOC !\"#$%&'()*+,-./0123456789:;<=>?@ABFHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37 38 40]
6. s = "LF"
d = "OGEDC !\"#$%&'()*+,-./0123456789:;<=>?@ABFHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37 38 40 3]
7. s = "F"
d = "LOGEDC !\"#$%&'()*+,-./0123456789:;<=>?@ABFHIJKMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37 38 40 3 45]
8. s = ""
d = "FLOGEDC !\"#$%&'()*+,-./0123456789:;<=>?@ABHIJKMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37 38 40 3 45 41]
OUTPUT: "COEFH#MI"
직무
인쇄 가능한 ASCII MTF를 구현하는 프로그램 또는 함수를 작성하십시오 (위에 정의 된대로).
테스트 사례
Input: Programming Puzzles & Code Golf
Output: Prpi"do lp%((uz rnu&3!P/o&$U$(p
Input: NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN BATMAN!
Output: Na! !! !! !! !! !! !! !! !! !! !! !! !! !! !! !!"DDUP"%'
Input: Two more questions and I have bzip2 in less than 100 bytes!
Output: Twp#o"si$sv#uvq(u$(l#o#W!r%w+$pz,xF%#,"x(. #0--'$GG ".z(**:
추가 규칙
문자열의 MTF를 계산하는 내장 연산자를 사용할 수 없습니다.
출력에 STDOUT을 선택하면 코드에 줄 바꿈 문자가 인쇄 될 수 있습니다.
코드는 1000 이하의 인쇄 가능한 ASCII 문자 (0x20 ~ 0x7E)를 입력해야합니다.
표준 코드 골프 규칙이 적용됩니다. 바이트 단위의 최단 제출이 이깁니다.