编写一个将字符串编码为Code 39格式条形码的函数或程序,其中每个字符被编码为由四个空格分隔的五个小节。两个条中的一个和一个间隙较宽,而另一个间隙较窄(10 * 4码),或者三个间隙较宽,而一个间隙都不是(4码)。这给出了44个不同的代码,其中一个是保留代码,用于表示编码字符串的开始和结束。
挑战
输入是仅包含集合中字符的字符串
1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ-. +/$%
输出是编码为条形码字符串的字符串。窄间隙和字符间间隙是单个空间,而宽间隙是三个空间。窄条是Unicode字符“ Full block”(█)的UTF-8字节序列,即0xE2 0x96 0x88宽条是三个这样的字节序列/字符(███)。代码的完整列表是:
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" → "█ █ ███ ███ █ █ █ █ ███ ███ ███ █ ███ █ █ █ ███ █ █ ███ █ ███ ███ █ █ █ █ ███ ███ █"
允许使用标准输入/输出格式,不允许使用标准漏洞。这是代码高尔夫球,因此以字节为单位的最短代码胜出!
#字符的使用进行惩罚不是很公平,因为例如,"#"并不是将其用于语言的唯一原因。