문자열을 Code 39 형식 바코드 로 인코딩하는 함수 또는 프로그램을 작성하십시오 . 여기서 각 문자는 4 개의 공백으로 구분 된 5 개의 막대로 인코딩됩니다. 막대 중 두 개와 간격 중 하나가 넓고 다른 하나는 좁거나 (10 * 4 코드), 간격 중 세 개가 넓고 막대 중 하나가 없습니다 (4 코드). 이 코드는 44 개의 서로 다른 코드를 제공하며,이 중 하나는 인코딩 된 문자열의 시작과 끝을 나타내는 데 사용되는 예약 된 코드입니다.
도전
입력은 세트의 문자 만 포함하는 문자열입니다.
1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ-. +/$%
출력은 바코드 문자열로 인코딩 된 문자열입니다. 좁은 간격과 문자 간 간격은 단일 공간이고 넓은 간격은 3 칸입니다. 좁은 막대는 유니 코드 문자 "Full block"에 대한 UTF-8 바이트 시퀀스, █입니다. 즉 0xE2 0x96 0x88넓은 막대는 이러한 3 개의 바이트 시퀀스 / 문자 ( ███)입니다. 전체 코드 목록은 다음과 같습니다.
Spaces
0100 0010 0001 1000 1011 1101 1110 0111
Bars
00000 + / $ %
10001 1 A K U
01001 2 B L V
11000 3 C M W
00101 4 D N X
10100 5 E O Y
01100 6 F P Z
00011 7 G Q -
10010 8 H R .
01010 9 I S space 1=wide
00110 0 J T start/end 0=narrow
막대와 공백은 막대에서 시작하여 인터리브되므로 예를 들어 Q는
bar 0 0 0 1 1
code █ █ █ ███ ███
space 0 0 0 1
모든 문자를 인코딩 한 후 문자열의 양쪽 끝이로 구분됩니다 █ █ ███ ███ █. 단일 문자 인 문자 간 간격이 모든 문자 사이에 삽입됩니다. 솔루션은 후행 공백과 후행 줄 바꿈 (순서대로)을 출력 할 수 있습니다.
예
"" → "█ █ ███ ███ █ █ █ ███ ███ █"
"A" → "█ █ ███ ███ █ ███ █ █ █ ███ █ █ ███ ███ █"
"C++" → "█ █ ███ ███ █ ███ ███ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ ███ ███ █"
"GOLF" → "█ █ ███ ███ █ █ █ █ ███ ███ ███ █ ███ █ █ █ ███ █ █ ███ █ ███ ███ █ █ █ █ ███ ███ █"
표준 입력 / 출력 형식이 허용되고 표준 허점이 허용되지 않습니다. 이것은 code-golf 이므로 바이트 단위로 측정 된 가장 짧은 코드가 이깁니다!
#예를 들어, "#"언어로 사용될 수있는 유일한 이유는 아니기 때문에 캐릭터 사용에 대한 처벌을하는 것은 그리 공평 하지 않습니다.