Schreiben Sie eine Funktion oder ein Programm, das eine Zeichenfolge in einen Barcode im Code 39- Format codiert, wobei jedes Zeichen als fünf durch vier Lücken getrennte Striche codiert wird. Entweder sind zwei der Balken und einer der Lücken breit und andere sind schmal (10 * 4 Codes), oder drei der Lücken sind breit und keiner der Balken ist (4 Codes). Dies ergibt 44 verschiedene Codes, von denen einer ein reservierter Code ist, der verwendet wird, um den Anfang und das Ende der codierten Zeichenfolge zu kennzeichnen.
Die Herausforderung
Die Eingabe ist eine Zeichenfolge, die nur Zeichen aus der Gruppe enthält
1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ-. +/$%
Die Ausgabe ist die als Barcode-Zeichenfolge codierte Zeichenfolge. Die engen Lücken und die Lücken zwischen den Zeichen sind ein einzelnes Leerzeichen und eine breite Lücke drei Leerzeichen. Der schmale Balken ist die UTF-8-Byte-Sequenz für das Unicode-Zeichen "Full Block", █, dh der 0xE2 0x96 0x88breite Balken besteht aus drei solchen Byte-Sequenzen / Zeichen ( ███). Die vollständige Liste der Codes lautet:
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
Die Striche und Zwischenräume werden beginnend mit einem Strich verschachtelt, also ist beispielsweise Q
bar 0 0 0 1 1
code █ █ █ ███ ███
space 0 0 0 1
Nach der Kodierung aller Zeichen wird die Zeichenkette an beiden Enden mit begrenzt █ █ ███ ███ █. Die Zeichenlücke, ein einzelnes Leerzeichen, wird zwischen jedem Buchstaben eingefügt. Ihre Lösung gibt möglicherweise abschließende Leerzeichen und eine abschließende neue Zeile (in dieser Reihenfolge) aus.
Beispiele
"" → "█ █ ███ ███ █ █ █ ███ ███ █"
"A" → "█ █ ███ ███ █ ███ █ █ █ ███ █ █ ███ ███ █"
"C++" → "█ █ ███ ███ █ ███ ███ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ ███ ███ █"
"GOLF" → "█ █ ███ ███ █ █ █ █ ███ ███ ███ █ ███ █ █ █ ███ █ █ ███ █ ███ ███ █ █ █ █ ███ ███ █"
Standard-Eingabe- / Ausgabeformate sind zulässig, und Standard-Lücken sind nicht zulässig. Das ist Code-Golf , also gewinnt der kürzeste in Bytes gemessene Code!
#Zeichens zu bestrafen , da dies beispielsweise "#"nicht der einzige Grund ist, warum es in einer Sprache verwendet werden kann.