Kode 39 , dikembangkan pada tahun 1974, adalah salah satu simbologi atau tipe barcode yang paling umum digunakan, meskipun itu adalah sistem UPC / EAN yang paling sering terlihat dalam penjualan ritel. Barcode kode 39 dapat menyandikan huruf besar, angka, dan beberapa simbol dan mudah dicetak dari perangkat lunak komputer menggunakan font khusus. Hal ini menyebabkan penggunaan komersial dan industri yang meluas (misalnya lencana ID perusahaan, pelacakan aset, otomatisasi pabrik).
Buat program atau fungsi terpendek untuk membaca kode 39 Code dalam orientasi apa pun dari gambar skala abu-abu 512x512 piksel; barcode mungkin tidak sejajar secara horizontal atau vertikal.
- Program Anda harus menerima format file gambar standar dan menghasilkan data yang dikodekan dalam barcode sebagai output standar atau nilai pengembalian (tidak termasuk karakter awal / berhenti).
- Tidak ada gambar yang mengandung lebih dari satu barcode 39 Kode yang valid, dan tidak ada barcode yang mengkode karakter spasi (ASCII 32).
- Jika tidak ada barcode Kode 39 yang valid ditampilkan dalam gambar, program harus menampilkan tanda tanya tunggal (
?
).
Saya telah menyiapkan implementasi referensi JavaScript dan rangkaian uji gambar dalam format PNG, baik dengan barcode yang valid dan tanpa. Implementasi referensi, yang gagal hanya 3 dari 46 kasus uji di browser Web terbaru, dimaksudkan untuk menunjukkan satu algoritma decoding yang mungkin, bukan untuk benar-benar sesuai dengan spesifikasi di atas.
Pengajuan yang valid melewati setidaknya 80% dari tes ini (37/46) dan tidak lebih dari satu menit untuk melakukannya untuk setiap gambar pada CPU yang cukup cepat (misalnya 2,6 GHz quad-core). Implementasi referensi saya melewati 93% tes dan memproses setiap gambar dalam waktu 10 detik (pada PC desktop saya yang menjalankan Google Chrome).
(Pertanyaan ini diajukan di Meta pada 28 Mei 2011.)
Jawaban:
Python, 899 karakter
Kode ini mengambil gambar format pnm sebagai input, jadi saya biasanya menjalankannya seperti:
Kode itu sendiri hanya mengambil banyak scanlines acak dan mencoba untuk mencocokkan berjalan hitam dan putih pada scanline itu dengan pola kode39. Ini acak sehingga bisa gagal menemukan barcode pada kesempatan tertentu. (Saya mendapatkan sekitar 20% tingkat kegagalan negatif palsu pada gambar tes.) Ketika gagal dibutuhkan sekitar satu menit untuk berjalan, ketika berhasil sering lebih cepat dari itu. Saya belum pernah melihat positif palsu.
sumber
M=dict(zip('UK.-RQA+HGYXON*TEDJ1/87$%540WVML SCBIZPF3296',[385,259,...]))