Почти каждый магазин в настоящее время использует штрих-коды универсального кода продукта (UPC), чтобы упростить процесс оформления заказа. Если имя ничего не значит для вас, вы наверняка узнаете, как они выглядят:
Формат
Наиболее распространенной системой является UPC-A, которая использует 12 цифр для обозначения каждого конкретного продукта. Каждая цифра закодирована в серию черно-белых полос, чтобы машины могли читать код длиной семь битов. Всего имеется 11 шаблонов, которые указывают начало, середину и конец штрих-кода. Это дает общую длину штрих-кода 12 × 7 + 11 = 95 бит. (Отныне, когда двоичный файл используется для обозначения цвета каждого бита, 0
он белый и 1
черный.)
Начало и конец имеют шаблон 101
. Затем цифры делятся на 2 группы по 6 и кодируются, как показано ниже, с шаблоном 01010
между левой и правой группами. В этой таблице перечислены шаблоны для каждого номера. Обратите внимание, что шаблон отличается в зависимости от того, находится ли цифра справа или слева (это позволяет сканировать штрих-код вверх ногами). Тем не менее, шаблон для правой стороны противоположен (поменять местами черный на белый и наоборот) от левого.
Если вы не видите изображение выше, это двоичный эквивалент каждого числа.
# 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
пример
Скажем, у вас есть СКП 022000 125033
. (Это не случайные числа. Оставьте комментарий, если вы выясните их значимость.) Вы начинаете с этого шаблона, который одинаков в каждом штрих-коде:
101xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx01010xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx101
Для цифр вы заменяете каждую на соответствующую кодировку для стороны (слева или справа), на которой она включена. Если вы все еще в замешательстве, см. Изображение ниже.
Вот вывод в двоичном виде с |
трубами, разделяющими части.
101|0001101|0010011|0010011|0001101|0001101|0001101|01010|1100110|1101100|1001110|1110010|1000010|1000010|101
Вызов
Напишите программу, которая выводит штрих-код UPC-A для пользовательского ввода. Размеры изображения должны составлять 95 × 30 пикселей, причем каждый «бит» имеет ширину в один пиксель и высоту 30 пикселей. Черные полосы rgb(0, 0, 0)
и белые полосы постоянно прозрачны или rgb(255, 255, 255)
.
Примечания
- Возьмите ввод из stdin или командной строки, или напишите функцию, которая принимает строку или целое число (обратите внимание, что ввод может иметь начальные нули, и большинство языков удаляют их или преобразуют число в восьмеричное).
- Выведите изображение одним из следующих способов:
- Сохраните его в файл с именем и форматом (PNG, PBM и т. Д.) По вашему выбору.
- Покажите это на экране.
- Вывести данные своего файла на стандартный вывод.
- Вы не можете использовать библиотеки или встроенные программы, которые генерируют штрих-коды ( я смотрю на вас, Mathematica ), хотя вы можете использовать библиотеки изображений или графики.
- Последняя цифра UPC обычно является контрольной цифрой , но для этих целей вам не нужно беспокоиться об этом.
Примеры
Вот еще несколько примеров для тестирования вашего кода. Двоичный вывод также приведен для удобства.
Входные данные: 012345678910
Выход:
10100011010011001001001101111010100011011000101010101000010001001001000111010011001101110010101
Входные данные: 777777222222
Выход:
10101110110111011011101101110110111011011101101010110110011011001101100110110011011001101100101
счет
Это код гольфа , поэтому самая короткая подача (в байтах выигрывает). Tiebreaker отправляется на самый ранний пост.
["777777","222222"]