Günümüzde hemen hemen her mağaza , teslim sürecini basitleştirmek için Evrensel Ürün Kodu (UPC) barkodlarını kullanıyor. İsim sizin için bir şey ifade etmiyorsa, kesinlikle neye benzediklerini anlayacaksınız:
Biçim
En yaygın sistem, her bir ürünü temsil etmek için 12 basamak kullanan UPC-A'dır. Her basamak, makinelerin kodu 7 bit uzunluğunda okumasına izin vermek için bir dizi siyah ve beyaz çizgili olarak kodlanır. Barkodun başlangıcını, ortasını ve sonunu gösteren toplam 11 bitlik desen vardır. Bu toplam 12 × 7 + 11 = 95 bit barkod uzunluğuna gelir. (Bundan sonra, her bitin rengini belirtmek için ikili kullanıldığında 0
, beyaz ve 1
siyahtır.)
Başlangıç ve bitiş her ikisinin de bir deseni vardır 101
. Basamaklar daha sonra 2 grup 6'ya bölünür ve aşağıda gösterildiği gibi 01010
sol ve sağ gruplar arasında bir desenle kodlanır . Bu tablo her bir sayının desenini listeler. Rakamın sağ veya sol tarafta olmasına bağlı olarak desenin farklı olduğuna dikkat edin (Bu, barkodun baş aşağı taranmasına izin verir). Bununla birlikte, sağdaki desen, solun tersi (beyaz için siyah takas ve tersi).
Yukarıdaki görüntüyü göremiyorsanız, bu her sayının ikili eşdeğeridir.
# Left Right
0 0001101 1110010
1 0011001 1100110
2 0010011 1101100
3 0111101 1000010
4 0100011 1011100
5 0110001 1001110
6 0101111 1010000
7 0111011 1000100
8 0110111 1001000
9 0001011 1110100
Misal
Diyelim ki UPC'niz var 022000 125033
. (Bunlar rastgele sayılar değildir. Eğer önemlerini anlarsanız bir yorum bırakın.) Her barkodda aynı olan bu kazan plakasıyla başlıyorsunuz:
101xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx01010xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx101
Rakamlar için, her birini, bulunduğu tarafın (sol veya sağ) karşılık gelen kodlamasıyla değiştirirsiniz. Hala kafanız karıştıysa, aşağıdaki resme bakın.
Burada |
parçaları ayıran borular ile ikili çıktı .
101|0001101|0010011|0010011|0001101|0001101|0001101|01010|1100110|1101100|1001110|1110010|1000010|1000010|101
Meydan okuma
Kullanıcı girişi için UPC-A barkodunu veren bir program yazın. Görüntünün boyutları 95 × 30 piksel olmalı ve her "bit" bir piksel genişliğinde ve 30 piksel yüksekliğinde olmalıdır. Siyah şeritler içeride rgb(0, 0, 0)
ve beyaz şeritler sürekli saydam veya rgb(255, 255, 255)
.
notlar
- Stdin veya komut satırından girdi alın veya bir dize veya tamsayı alan bir işlev yazın (girişin başında sıfır olabilir ve çoğu dil bunları kaldırır veya sayıyı sekizlik biçime dönüştürür).
- Görüntünün çıktısını aşağıdaki yollardan biriyle alın:
- İstediğiniz ad ve biçime (PNG, PBM, vb.) Sahip bir dosyaya kaydedin.
- Ekranda görüntüleyin.
- Dosya verilerini stdout'a çıktılar.
- Resim veya grafik kitaplıkları kullanabilmenize rağmen , barkod üreten kitaplıkları veya yerleşik yapıları ( size bakıyorum Mathematica ) kullanamazsınız.
- Bir UPC'nin son basamağı genellikle bir kontrol basamağıdır , ancak bu amaçlar için endişelenmenize gerek yoktur.
Örnekler
Kodunuzu test etmek için bazı örnekler. İkili çıktı da kolaylık sağlamak için verilmiştir.
Giriş: 012345678910
Çıktı:
10100011010011001001001101111010100011011000101010101000010001001001000111010011001101110010101
Giriş: 777777222222
Çıktı:
10101110110111011011101101110110111011011101101010110110011011001101100110110011011001101100101
puanlama
Bu kod golf , yani kısa teslim (bayt kazanır). Tiebreaker en erken mesaja gider.
["777777","222222"]