Hampir setiap toko saat ini menggunakan barcode Kode Produk Universal (UPC) untuk menyederhanakan proses pemeriksaan. Jika nama itu tidak berarti apa-apa bagi Anda, Anda pasti akan mengenali seperti apa tampilannya:

Format
Sistem yang paling umum adalah UPC-A, yang menggunakan 12 digit untuk mewakili setiap produk tertentu. Setiap digit dikodekan ke dalam serangkaian garis-garis hitam dan putih untuk memungkinkan mesin membaca kode, panjang tujuh bit. Ada total pola senilai 11 bit yang menunjukkan awal, tengah, dan akhir barcode. Ini mencapai total panjang barcode 12 × 7 + 11 = 95 bit. (Mulai sekarang, ketika biner digunakan untuk merujuk pada warna setiap bit, 0berwarna putih dan 1hitam.)
Awal dan akhir keduanya memiliki pola 101. Digit-digit tersebut kemudian dibagi menjadi 2 kelompok dengan 6 dan dikodekan seperti yang ditunjukkan di bawah ini, dengan pola 01010antara kelompok kiri dan kanan. Tabel ini mencantumkan pola untuk setiap nomor. Perhatikan bahwa polanya berbeda tergantung pada apakah digit berada di sisi kanan atau kiri (Ini memungkinkan barcode dipindai secara terbalik). Namun, pola untuk kanan adalah kebalikannya (swap hitam untuk putih dan sebaliknya) dari pola kiri.

Jika Anda tidak dapat melihat gambar di atas, ini adalah setara biner masing-masing angka.
# 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
Contoh
Katakanlah Anda memiliki UPC 022000 125033. (Itu bukan angka acak. Berikan komentar jika Anda mengetahui signifikansinya.) Anda mulai dengan pelat ini yang sama di setiap barcode:
101xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx01010xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx101
Untuk digit, Anda ganti masing-masing dengan pengkodean yang sesuai untuk sisi (kiri atau kanan) yang aktif. Jika Anda masih bingung, lihat gambar di bawah ini.

Berikut ini adalah output dalam biner dengan |pipa yang memisahkan bagian-bagiannya.
101|0001101|0010011|0010011|0001101|0001101|0001101|01010|1100110|1101100|1001110|1110010|1000010|1000010|101
Tantangan
Tulis program yang mengeluarkan kode batang UPC-A untuk input pengguna. Dimensi gambar harus 95 × 30 piksel, dengan masing-masing "bit" berukuran satu piksel dan tinggi 30 piksel. Garis-garis hitam dalam rgb(0, 0, 0)dan garis-garis putih transparan atau konsisten rgb(255, 255, 255).
Catatan
- Ambil input dari stdin atau baris perintah, atau tulis fungsi yang mengambil string atau integer (perhatikan bahwa input dapat memiliki angka nol di depan, dan sebagian besar bahasa menghapusnya atau mengonversi angka menjadi oktal).
- Keluarkan gambar dengan salah satu cara berikut:
- Simpan ke file dengan nama dan format (PNG, PBM, dll.) Pilihan Anda.
- Tampilkan di layar.
- Keluarkan data file-nya ke stdout.
- Anda mungkin tidak menggunakan pustaka atau builtin yang menghasilkan barcode ( saya melihat Anda, Mathematica ), meskipun Anda dapat menggunakan pustaka gambar atau grafik.
- Digit terakhir dari UPC biasanya digit periksa , tetapi untuk tujuan ini Anda tidak perlu khawatir.
Contohnya
Berikut adalah beberapa contoh untuk menguji kode Anda. Output biner juga diberikan untuk kenyamanan.
Memasukkan: 012345678910
Keluaran:

10100011010011001001001101111010100011011000101010101000010001001001000111010011001101110010101
Memasukkan: 777777222222
Keluaran:

10101110110111011011101101110110111011011101101010110110011011001101100110110011011001101100101
Mencetak gol
Ini adalah kode golf , jadi pengiriman terpendek (dalam byte menang). Tiebreaker pergi ke pos paling awal.
["777777","222222"]

