Практично кожен магазин сьогодні використовує штрих-коди універсального коду товару (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
Приклад
Скажіть, у вас є UPC 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 тощо).
- Відобразити його на екрані.
- Виведіть свої файлові дані в stdout.
- Ви не можете використовувати бібліотеки або вбудовані модулі, які генерують штрих-коди ( я дивлюся на вас, Mathematica ), хоча ви можете використовувати бібліотеки зображень або графіки.
- Остання цифра UPC, як правило, є контрольною цифрою , але для цих цілей вам не доведеться турбуватися про це.
Приклади
Ось ще кілька прикладів тестування вашого коду. Бінарний вихід також надається для зручності.
Вхід: 012345678910
Вихід:
10100011010011001001001101111010100011011000101010101000010001001001000111010011001101110010101
Вхід: 777777222222
Вихід:
10101110110111011011101101110110111011011101101010110110011011001101100110110011011001101100101
Оцінка балів
Це код гольфу , тому найкоротше подання (у байтах виграє). Tierereaker йде на найбільш ранню посаду.
["777777","222222"]