文字列をCode 39形式のバーコードにエンコードする関数またはプログラムを記述します。各文字は、4つのギャップで区切られた5つのバーとしてエンコードされます。2つのバーと1つのギャップは広く、他のバーは狭い(10 * 4コード)、または3つのギャップは広く、バーは1つもない(4コード)。これにより、44個の異なるコードが得られます。そのうちの1つは、エンコードされた文字列の開始と終了を示すために使用される予約済みのコードです。
チャレンジ
入力は、セットの文字のみを含む文字列です
1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ-. +/$%
出力は、バーコード文字列としてエンコードされた文字列です。狭いギャップと文字間のギャップは単一のスペースであり、広いギャップは3つのスペースです。狭いバーは、ユニコード文字「フルブロック」、█の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であるため、バイト単位で測定された最短のコードが優先されます!
#たとえば、"#"言語で使用できる唯一の理由ではないため、キャラクターの使用に罰則を与えることはあまり公平ではありません。