Ngày nay, mọi cửa hàng đều sử dụng mã vạch Mã sản phẩm chung (UPC) để đơn giản hóa quy trình kiểm tra. Nếu tên không có ý nghĩa gì với bạn, bạn chắc chắn sẽ nhận ra chúng trông như thế nào:
định dạng
Hệ thống phổ biến nhất là UPC-A, sử dụng 12 chữ số để thể hiện từng sản phẩm cụ thể. Mỗi chữ số được mã hóa thành một chuỗi các sọc đen trắng để cho phép các máy đọc mã, độ dài bảy bit. Có tổng số các mẫu có giá trị 11 bit chỉ ra phần đầu, phần giữa và phần cuối của mã vạch. Điều này có tổng chiều dài mã vạch là 12 × 7 + 11 = 95 bit. (Từ bây giờ, khi nhị phân được sử dụng để chỉ màu của mỗi bit, 0
là màu trắng và 1
màu đen.)
Bắt đầu và kết thúc cả hai có một mô hình 101
. Các chữ số sau đó được chia thành 2 nhóm 6 và được mã hóa như hình bên dưới, với một mẫu 01010
giữa các nhóm bên trái và bên phải. Bảng này liệt kê các mẫu cho mỗi số. Lưu ý rằng mẫu khác nhau tùy thuộc vào chữ số ở bên phải hay bên trái (Điều này cho phép quét mã vạch lộn ngược). Tuy nhiên, mẫu cho bên phải là ngược lại (hoán đổi màu đen cho màu trắng và ngược lại) của mẫu bên trái.
Nếu bạn không thể nhìn thấy hình ảnh ở trên, đây là tương đương nhị phân của mỗi số.
# 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
Thí dụ
Nói rằng bạn có UPC 022000 125033
. (Đó không phải là số ngẫu nhiên. Hãy để lại nhận xét nếu bạn nhận ra tầm quan trọng của chúng.) Bạn bắt đầu với bản tóm tắt này giống nhau trong mỗi mã vạch:
101xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx01010xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx101
Đối với các chữ số, bạn thay thế từng chữ số bằng mã hóa tương ứng cho mặt bên (bên trái hoặc bên phải). Nếu bạn vẫn còn bối rối, hãy xem hình ảnh dưới đây.
Đây là đầu ra trong nhị phân với các |
ống ngăn cách các bộ phận.
101|0001101|0010011|0010011|0001101|0001101|0001101|01010|1100110|1101100|1001110|1110010|1000010|1000010|101
Thử thách
Viết chương trình xuất mã vạch UPC-A cho đầu vào của người dùng. Kích thước của hình ảnh phải là 95 × 30 pixel, với mỗi "bit" rộng một pixel và cao 30 pixel. Các sọc đen nằm trong rgb(0, 0, 0)
và các sọc trắng luôn trong suốt hoặc rgb(255, 255, 255)
.
Ghi chú
- Lấy đầu vào từ stdin hoặc dòng lệnh hoặc viết hàm lấy chuỗi hoặc số nguyên (lưu ý rằng đầu vào có thể có các số 0 đứng đầu và hầu hết các ngôn ngữ sẽ loại bỏ chúng hoặc chuyển đổi số thành bát phân).
- Xuất hình ảnh theo một trong các cách sau:
- Lưu nó vào một tệp có tên và định dạng (PNG, PBM, v.v.) mà bạn chọn.
- Hiển thị nó trên màn hình.
- Xuất dữ liệu tệp của nó ra thiết bị xuất chuẩn.
- Bạn không được sử dụng các thư viện hoặc nội dung tạo mã vạch ( Tôi đang nhìn vào bạn, Mathicala ), mặc dù bạn có thể sử dụng các thư viện hình ảnh hoặc đồ họa.
- Chữ số cuối cùng của UPC thường là chữ số kiểm tra , nhưng với những mục đích này, bạn không phải lo lắng về nó.
Ví dụ
Dưới đây là một số ví dụ khác để kiểm tra mã của bạn với. Đầu ra nhị phân cũng được đưa ra để thuận tiện.
Đầu vào: 012345678910
Đầu ra:
10100011010011001001001101111010100011011000101010101000010001001001000111010011001101110010101
Đầu vào: 777777222222
Đầu ra:
10101110110111011011101101110110111011011101101010110110011011001101100110110011011001101100101
Chấm điểm
Đây là mã golf , vì vậy bài nộp ngắn nhất (tính bằng byte thắng). Tiebreaker đi đến bài viết sớm nhất.
["777777","222222"]