En la actualidad, casi todas las tiendas utilizan códigos de barras del Código de producto universal (UPC) para simplificar el proceso de pago. Si el nombre no significa nada para ti, seguramente reconocerás cómo se ven:
Formato
El sistema más común es UPC-A, que utiliza 12 dígitos para representar cada producto específico. Cada dígito se codifica en una serie de franjas en blanco y negro para permitir que las máquinas lean el código, una longitud de siete bits. Hay un total de 11 bits de patrones que indican el comienzo, el medio y el final del código de barras. Esto llega a una longitud total de código de barras de 12 × 7 + 11 = 95 bits. (De ahora en adelante, cuando el binario se usa para referirse al color de cada bit, 0
es blanco y 1
es negro).
El principio y el final tienen un patrón de 101
. Los dígitos se dividen en 2 grupos de 6 y se codifican como se muestra a continuación, con un patrón 01010
entre los grupos izquierdo y derecho. Esta tabla enumera el patrón para cada número. Tenga en cuenta que el patrón es diferente dependiendo de si el dígito está en el lado derecho o izquierdo (esto permite escanear el código de barras al revés). Sin embargo, el patrón de la derecha es el opuesto (cambiar negro por blanco y viceversa) del de la izquierda.
Si no puede ver la imagen de arriba, este es el equivalente binario de cada número.
# 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
Ejemplo
Digamos que tienes la UPC 022000 125033
. (Esos no son números aleatorios. Deja un comentario si descubres su importancia). Empiezas con este repetitivo que es el mismo en cada código de barras:
101xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx01010xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx101
Para los dígitos, reemplaza cada uno con la codificación correspondiente para el lado (izquierdo o derecho) en el que está activado. Si aún estás confundido, mira la imagen a continuación.
Aquí está la salida en binario con |
tuberías que separan las partes.
101|0001101|0010011|0010011|0001101|0001101|0001101|01010|1100110|1101100|1001110|1110010|1000010|1000010|101
Desafío
Escriba un programa que genere el código de barras UPC-A para la entrada del usuario. Las dimensiones de la imagen deben ser 95 × 30 píxeles, con cada "bit" de un píxel de ancho y 30 píxeles de alto. Las rayas negras están adentro rgb(0, 0, 0)
y las rayas blancas son consistentemente transparentes o rgb(255, 255, 255)
.
Notas
- Tome la entrada de stdin o la línea de comando, o escriba una función que tome una cadena o un entero (tenga en cuenta que la entrada puede tener ceros a la izquierda, y la mayoría de los idiomas los eliminan o convierten el número a octal).
- Imprima la imagen de una de las siguientes maneras:
- Guárdelo en un archivo con un nombre y formato (PNG, PBM, etc.) de su elección.
- Visualízalo en la pantalla.
- Salida de sus datos de archivo a stdout.
- No puede usar bibliotecas o archivos integrados que generen códigos de barras ( lo estoy mirando a usted, Mathematica ), aunque puede usar bibliotecas de imágenes o gráficos.
- El último dígito de un UPC suele ser un dígito de verificación , pero para estos fines no tiene que preocuparse por ello.
Ejemplos
Aquí hay algunos ejemplos más para probar su código. La salida binaria también se proporciona por conveniencia.
Entrada: 012345678910
Salida:
10100011010011001001001101111010100011011000101010101000010001001001000111010011001101110010101
Entrada: 777777222222
Salida:
10101110110111011011101101110110111011011101101010110110011011001101100110110011011001101100101
Puntuación
Este es el código de golf , por lo que el envío más corto (en bytes gana). Tiebreaker va al primer mensaje.
["777777","222222"]