Napisz funkcję lub program, który koduje ciąg znaków do kodu kreskowego w formacie Code 39 , w którym każdy znak jest kodowany jako pięć pasków oddzielonych czterema przerwami. Albo dwa słupki i jeden z odstępów są szerokie, a inne wąskie (kody 10 * 4), lub trzy z odstępów są szerokie i żaden z słupków nie jest (4 kody). Daje to 44 różne kody, z których jeden jest kodem zastrzeżonym używanym do oznaczenia początku i końca zakodowanego ciągu.
Wyzwanie
Dane wejściowe to ciąg zawierający tylko znaki z zestawu
1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ-. +/$%
Dane wyjściowe to ciąg kodowany jako ciąg kodu kreskowego. Wąska przerwa i przerwy między znakami są pojedynczą przestrzenią, a szeroka przerwa to trzy spacje. Wąski słupek jest sekwencją bajtów UTF-8 dla znaku Unicode „Pełny blok”, █, tj. 0xE2 0x96 0x88A szeroki słupek to trzy takie sekwencje bajtów / znaki ( ███). Pełna lista kodów to:
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
Słupki i spacje są przeplatane, zaczynając od słupka, więc na przykład Q to
bar 0 0 0 1 1
code █ █ █ ███ ███
space 0 0 0 1
Po zakodowaniu wszystkich znaków ciąg jest rozdzielany na obu końcach znakiem █ █ ███ ███ █. Przerwa między znakami, pojedyncza spacja, jest wstawiana między każdą literę. Twoje rozwiązanie może generować końcowe spacje i końcowy znak nowej linii (w tej kolejności).
Przykłady
"" → "█ █ ███ ███ █ █ █ ███ ███ █"
"A" → "█ █ ███ ███ █ ███ █ █ █ ███ █ █ ███ ███ █"
"C++" → "█ █ ███ ███ █ ███ ███ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ ███ ███ █"
"GOLF" → "█ █ ███ ███ █ █ █ █ ███ ███ ███ █ ███ █ █ █ ███ █ █ ███ █ ███ ███ █ █ █ █ ███ ███ █"
Standardowe formaty wejścia / wyjścia są dozwolone, a standardowe luki są niedozwolone. To jest golf golfowy , więc wygrywa najkrótszy kod mierzony w bajtach!
#postaci jest niesprawiedliwe , ponieważ na przykład "#"nie jest to jedyny powód, dla którego można ją zastosować w języku.