배경
1870 년 Émile Baudot는 전신용 고정 길이 문자 인코딩 인 Baudot Code를 발명했습니다 . 그는 단지 5 개의 키로 수동 키보드에서 입력 할 수 있도록 코드를 설계했습니다. 두 개는 왼손으로 작동하고 세 개는 오른쪽으로 작동했습니다.
오른쪽 검지, 가운데 및 약지 손가락은 각각 I , II 및
III 키를, 왼쪽 검지 및 가운데 손가락은 IV 및 Ⅴ를 작동합니다
. (따라서 나는 서양 아라비아 숫자, 즉
1 에서 5까지를 사용할 것이다.) 문자는 코드로 입력된다. 예를 들어, 문자 "C"를 입력하려면 조작자가 1 , 3 및 4를 누릅니다.이때, 회전 브러시 암은 각각의 키를 순차적으로 판독하고 전류를 누르거나 누르지 않은 키에 대해서는 전류를 전송하지 않는다. 결과적으로 현대 용어로 5 비트 최하위 비트 우선 이진 인코딩이되는데, 여기서 "C"는로 인코딩됩니다 10110
.
5 비트 ??
최대 32 개의 고유 한 기호를 표현할 수있는 5 비트는 영어 문자와 숫자로도 구두점을 표현하기에 충분하지 않다고 생각할 수 있습니다. Baudot는 자신의 소매를 속임수로 만들었습니다. 그의 문자 세트는 실제로 두 개의 고유 한 세트입니다 : Letters and
Figures .
Letters 모드로 전환되는 Letter Shift 는 5 키 ( 00001
) 만 누르면 활성화되고 Figure Shift 는 4 키 ( 00010
)로 활성화됩니다
.
도전
당신의 도전은 Baudot 코드 전송을 디코딩하는 프로그램이나 기능을 작성하는 것입니다.
실제 전송은 일부 초기화 비트와 각 문자 전후의 시작 및 정지 비트로 시작하지만 그 문자를 건너 뛰고 각 문자에 대해 5 개의 고유 비트 만 걱정합니다. 입력 및 출력 형식은 아래에 설명되어 있습니다.
바우도의 코드
Baudot 코드에는 두 가지 버전이 있습니다. Continental 및 UK Baudot의 기본 프랑스어에서 "É"와 같은 문자를 포함 하지 않는 영국 버전을 사용합니다 . 또한 인쇄 가능한 ASCII 문자에 속하지 않는 영국 버전의 모든 기호는 생략합니다. 아래 표의 문자 만 디코딩하면됩니다. 표 아래에 설명 된 마지막 3 개의 제어 문자를 제외한 모든 문자는 인쇄 가능한 ASCII 문자입니다.
"Ltr"열은 문자 모드의 문자를 나타내고 "Fig"는 숫자 모드 문자를 나타냅니다.
Encoding Encoding
Ltr Fig 12345 Ltr Fig 12345
--- --- -------- --- --- --------
A 1 10000 P + 11111
B 8 00110 Q / 10111
C 9 10110 R - 00111
D 0 11110 S 00101
E 2 01000 T 10101
F 01110 U 4 10100
G 7 01010 V ' 11101
H 11010 W ? 01101
I 01100 X 01001
J 6 10010 Y 3 00100
K ( 10011 Z : 11001
L = 11011 - . 10001
M ) 01011 ER ER 00011
N 01111 FS SP 00010
O 5 11100 SP LS 00001
/ 11000
오른쪽 열의 마지막 세 행은 제어 문자입니다.
ER
이다 소거가 . Baudot의 전신 기계는이 문자에 별표와 같은 기호를 인쇄하여 독자에게 선행 문자를 무시해야한다고 알려주지 만, 독자에게는 더 좋으며 실제로는 선행 문자를 생략 (인쇄하지 않음) 할 것 입니다. 문자 및 그림 모드에서 모두 동일하게 작동합니다.FS
이다 그림 이동 . 문자 세트를 문자에서 그림으로 전환합니다. 디코더가 이미 그림 모드 인 경우 FS는 공백으로 처리됩니다 (SP
"Ltr"열의 에거). 디코더가 피겨 모드에있을 때 LS 문자가 수신 될 때까지 피겨 모드를 유지합니다.LS
입니다 편지 이동 . 문자 세트를 문자에서 문자로 전환합니다. 디코더가 이미 문자 모드 인 경우 LS는 Space 로 처리됩니다 . 문자 모드에있을 때 디코더는 FS 문자가 수신 될 때까지 문자 모드를 유지합니다.
디코더는 항상 레터 모드에서 시작합니다.
Figure Shift, Letter Shift 및 Space를 사용한 예는 다음과 같습니다.
01011 10000 00100 00001 00010 10000 11100 00001 10101 11010
M A Y LS/SP FS/SP 1 5 LS/SP T H
메시지가 나타납니다 MAY 15TH
. 보시다시피 00001
, 디코더가 이미 문자 모드에 있기 때문에 첫 번째 (Letter Shift / Space) 문자는 공백으로 작동합니다. 다음 문자 00010
(그림 이동 / 공간)는 디코더를 그림 모드로 전환하여 인쇄 15
합니다. 그런 다음 00001
다시 나타나지만 이번에는 문자 이동으로 작동하여 디코더를 문자 모드로 되돌립니다.
편의상 다음은 편집기에서보다 쉽게 요약 할 수있는 형식의 문자입니다 (코드별로 정렬).
A,1,10000|E,2,01000|/,,11000|Y,3,00100|U,4,10100|I,,01100|O,5,11100|FS,SP,00010|J,6,10010|G,7,01010|H,,11010|B,8,00110|C,9,10110|F,,01110|D,0,11110|SP,LS,00001|-,.,10001|X,,01001|Z,:,11001|S,,00101|T,,10101|W,?,01101|V,',11101|ER,ER,00011|K,(,10011|M,),01011|L,=,11011|R,-,00111|Q,/,10111|N,,01111|P,+,11111
입력
입력은 가장 중요하지 않은 비트의 첫 번째 순서로 문자열, 배열 또는 비트 목록이됩니다. 각 문자는 5 비트의 5 중주로 표시됩니다. 비트는
전송의 비트에 직접 매핑 되는 한 이진 문자열, 0
s 및 1
s 배열 , 문자열 "0"
및 "1"
문자, 단일 매우 큰 수 등과 같은 임의의 합리적인 형식 일 수 있습니다.
모든 전송에는 적어도 하나의 인쇄 가능한 5 중주와 최대 255 개의 5 중주 (인쇄 가능 또는 기타), 즉 5–1,275 비트가 포함됩니다.
입력은 두 개의 허용 된 예외를 제외하고 전송 비트 만 포함 할 수 있습니다 . 임의의 수의 선행 또는 후행 0
비트 및 / 또는 문자열 입력의 경우 단일 후행 줄 바꿈이 전송에 추가 될 수 있습니다. 선행 또는 후행 비트 또는 문자 는 각 5 중주 전후에 추가 할 수 없습니다. 즉, 5 중 정수 유형이 아닌 경우 각 5 중주를 8 비트로 채울 수 없습니다 (또는 배열에서 각 5 중주를 단일 숫자로 사용할 수 없음). 추가 비트가있는 5 중주, 예 "01111\n11100"
.
노트 및 엣지 케이스
전송에는 위 표의 "Ltr"및 "Fig"열에있는 문자 만 포함됩니다.
01110
"그림"열에 없기 때문에 예를 들어 그림 모드에서는 수신되지 않습니다 .디코더는 전송 시작시 항상 레터 모드에 있다고 가정합니다. 그러나 첫 번째 문자 는 바로 그림 모드로 전환하는 FS 문자 일 수 있습니다.
디코더가 문자 모드에있을 때, LS 문자를 수신 할 수 있고, 숫자 모드에있을 때 FS 문자를 수신 할 수 있습니다. 두 경우 모두 공백 문자를 인쇄해야합니다 (출력 참조).
ER 문자는 전송에서 첫 번째 문자가 아니며 LS, FS 또는 다른 ER을 즉시 따르지 않습니다.
FS 문자는 LS 문자 바로 뒤에 올 수 있으며 그 반대도 마찬가지입니다.
LS 또는 FS 문자는 전송의 마지막 문자가 아닙니다.
/
및-
문자는 어느 문자 모드 (코드에서 수신 될 수11000
및10001
각각) 또는도 모드 (10111
및00111
).
산출
출력은 ASCII (또는 표현 된 모든 문자가 ASCII와 동일한 UTF-8) 인 가장 합리적인 형식의 형식 일 수 있습니다. 출력이 다른 인코딩 또는 형식 인 경우 답변에 표시하십시오.
노트
- 공백 문자 (위 3. 참조)는 ASCII 공백 (0x20)이거나 인코딩과 동등한 문자 여야합니다. 즉, 스페이스 바를 누를 때 얻는 문자입니다.
승리
이것은 code-golf 입니다. 바이트 단위의 가장 짧은 코드가 이깁니다.
제한 사항
표준 허점은 금지되어 있습니다.
후행 공백 및 / 또는 단일 후행 줄 바꿈이 허용됩니다. 선행 공백이나 다른 문자 (전송에 포함되지 않은)는 허용되지 않습니다.
Baudot 코드 (또는 Murray 코드, ITA-1 등의 하위 항목)를 디코딩하는 내장 또는 라이브러리 기능을 사용할 수 없습니다.
테스트 사례
Input: 001101000010100111101110010101
Output: BAUDOT
Input: 11010010001001100011110111101111100
Output: HELLO
Input: 01011100000010000001000101000011100000011010111010
Output: MAY 15TH
Input: 0001000100010000001000001011101110011100101010010110101010001111100101
Output: 32 FOOTSTEPS
Input: 10110000110101011100111100001111011010000001101110
Output: GOLF
Input: 000100011000001111100000100010110111001100010110010000111111
Output: 8D =( :P
Input: 0000100001000010000100010001111011111011000011100010001
Output (4 leading spaces): -/=/-
00010
는 SP
문자 모드와 FS
그림 모드 로 나열 됩니다. 설명에 따르면 문자 모드에 있고 code를 받으면 00010
그림 모드로 전환해야하지만 테이블의 값이 다른 것처럼 보입니다. 또한의 반대의 경우도 마찬가지입니다 00001
.