Aujourd'hui, presque tous les magasins utilisent des codes-barres UPC ( Universal Product Code ) pour simplifier le processus de vérification. Si le nom ne vous dit rien, vous reconnaîtrez sûrement à quoi il ressemble:
Format
Le système le plus courant est UPC-A, qui utilise 12 chiffres pour représenter chaque produit spécifique. Chaque chiffre est codé en une série de bandes noires et blanches pour permettre aux machines de lire le code, une longueur de sept bits. Il existe un total de 11 bits de motifs qui indiquent le début, le milieu et la fin du code-barres. Cela donne une longueur totale de code-barres de 12 × 7 + 11 = 95 bits. (Désormais, lorsque binaire est utilisé pour faire référence à la couleur de chaque bit, il 0
est blanc et 1
noir.)
Le début et la fin ont tous deux un motif de 101
. Les chiffres sont ensuite divisés en 2 groupes de 6 et codés comme indiqué ci-dessous, avec un motif 01010
entre les groupes gauche et droit. Ce tableau répertorie le modèle de chaque numéro. Notez que le motif est différent selon que le chiffre se trouve à droite ou à gauche (cela permet de scanner le code-barres à l'envers). Cependant, le motif pour la droite est l'opposé (permuter le noir pour le blanc et vice versa) de celui de la gauche.
Si vous ne voyez pas l'image ci-dessus, c'est l'équivalent binaire de chaque numéro.
# 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
Exemple
Disons que vous avez l'UPC 022000 125033
. (Ce ne sont pas des nombres aléatoires. Laissez un commentaire si vous comprenez leur signification.) Vous commencez avec ce passe-partout qui est le même dans chaque code-barres:
101xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx01010xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx101
Pour les chiffres, vous remplacez chacun par le codage correspondant pour le côté (gauche ou droit) sur lequel il est activé. Si vous êtes toujours confus, voyez l'image ci-dessous.
Voici la sortie en binaire avec des |
tuyaux séparant les pièces.
101|0001101|0010011|0010011|0001101|0001101|0001101|01010|1100110|1101100|1001110|1110010|1000010|1000010|101
Défi
Écrivez un programme qui sort le code-barres UPC-A pour l'entrée utilisateur. Les dimensions de l'image doivent être de 95 × 30 pixels, chaque "bit" ayant une largeur d'un pixel et une hauteur de 30 pixels. Les rayures noires sont dedans rgb(0, 0, 0)
et les rayures blanches sont toujours transparentes ou rgb(255, 255, 255)
.
Remarques
- Prenez l'entrée de stdin ou de la ligne de commande, ou écrivez une fonction qui prend une chaîne ou un entier (notez que l'entrée peut avoir des zéros en tête, et la plupart des langues les suppriment ou convertissent le nombre en octal).
- Générez l'image de l'une des manières suivantes:
- Enregistrez-le dans un fichier avec un nom et un format (PNG, PBM, etc.) de votre choix.
- Affichez-le à l'écran.
- Exporte ses données de fichier vers stdout.
- Vous ne pouvez pas utiliser de bibliothèques ou de commandes intégrées qui génèrent des codes-barres ( je vous regarde, Mathematica ), bien que vous puissiez utiliser des bibliothèques d'images ou de graphiques.
- Le dernier chiffre d'un CUP est généralement un chiffre de contrôle , mais à ces fins, vous n'avez pas à vous en soucier.
Exemples
Voici quelques exemples supplémentaires pour tester votre code. La sortie binaire est également donnée pour plus de commodité.
Contribution: 012345678910
Production:
10100011010011001001001101111010100011011000101010101000010001001001000111010011001101110010101
Contribution: 777777222222
Production:
10101110110111011011101101110110111011011101101010110110011011001101100110110011011001101100101
Notation
Il s'agit du code golf , donc la soumission la plus courte (en octets gagne). Tiebreaker va au premier poste.
["777777","222222"]