Bir dizeyi Kod 39 biçimindeki bir barkoda kodlayan bir işlev veya program yazın ; burada her karakter dört boşlukla ayrılmış beş çubuk olarak kodlanır. Çubukların ikisi ve boşluklardan biri geniş ve diğerleri dar (10 * 4 kod) veya boşlukların üçü geniş ve çubukların hiçbiri (4 kod) değil. Bu, kodlanmış dizenin başlangıcını ve sonunu belirtmek için kullanılan ayrılmış bir kod olan 44 farklı kod verir.
Meydan okuma
Giriş, yalnızca kümedeki karakterleri içeren bir dizedir
1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ-. +/$%
Çıktı, barkod dizesi olarak kodlanan dizedir. Dar boşluk ve karakter arası boşluklar tek boşluktur ve geniş boşluk üç boşluktur. Dar çubuk Unicode "Tam blok", █ için UTF-8 bayt dizisidir, yani 0xE2 0x96 0x88geniş çubuk üç bayt dizisi / karakteridir ( ███). Kodların tam listesi:
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
Çubuklar ve boşluklar, bir çubuktan başlayarak araya eklenir, örneğin Q,
bar 0 0 0 1 1
code █ █ █ ███ ███
space 0 0 0 1
Tüm karakterleri kodladıktan sonra, dize her iki uçta ile sınırlandırılır █ █ ███ ███ █. Karakterler arası boşluk, tek bir boşluk, her harf arasına eklenir. Çözümünüz, sondaki boşlukları ve sondaki yeni satırı (bu sırayla) çıktılayabilir.
Örnekler
"" → "█ █ ███ ███ █ █ █ ███ ███ █"
"A" → "█ █ ███ ███ █ ███ █ █ █ ███ █ █ ███ ███ █"
"C++" → "█ █ ███ ███ █ ███ ███ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ ███ ███ █"
"GOLF" → "█ █ ███ ███ █ █ █ █ ███ ███ ███ █ ███ █ █ █ ███ █ █ ███ █ ███ ███ █ █ █ █ ███ ███ █"
Standart giriş / çıkış biçimlerine izin verilir ve standart boşluklara izin verilmez. Bu kod golf , bu yüzden bayt cinsinden ölçülen en kısa kod kazanır!
#Örneğin, "#"bir dilde kullanılabilmesinin tek nedeni , karakterin kullanımlarına ceza vermek çok adil değil.