Prawie każdy sklep używa obecnie kodów kreskowych Universal Product Code (UPC), aby uprościć proces sprawdzania. Jeśli imię nic dla ciebie nie znaczy, na pewno rozpoznasz ich wygląd:
Format
Najpopularniejszym systemem jest UPC-A, który używa 12 cyfr do przedstawienia każdego konkretnego produktu. Każda cyfra jest zakodowana w szereg czarno-białych pasków, aby umożliwić maszynom odczytanie kodu o długości siedmiu bitów. Istnieje w sumie 11 bitów wzorów, które wskazują początek, środek i koniec kodu kreskowego. Dochodzi do całkowitej długości kodu kreskowego 12 × 7 + 11 = 95 bitów. (Od teraz, gdy binarny jest używany do odniesienia do koloru każdego bitu, 0
jest biały i 1
jest czarny).
Zarówno początek, jak i koniec mają wzór 101
. Cyfry są następnie dzielone na 2 grupy po 6 i kodowane, jak pokazano poniżej, wzorem 01010
między grupami lewą i prawą. W tej tabeli wymieniono wzór dla każdej liczby. Należy pamiętać, że wzór różni się w zależności od tego, czy cyfra znajduje się po prawej czy lewej stronie (umożliwia to skanowanie kodu kreskowego do góry nogami). Jednak wzór dla prawej jest odwrotny (zamień czarny na biały i odwrotnie) dla lewego.
Jeśli nie widzisz powyższego obrazu, jest to binarny odpowiednik każdej liczby.
# 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
Przykład
Powiedz, że masz UPC 022000 125033
. (To nie są liczby losowe. Zostaw komentarz, jeśli zrozumiesz ich znaczenie.) Zaczynasz od tej tablicy, która jest taka sama w każdym kodzie kreskowym:
101xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx01010xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx101
W przypadku cyfr każdy z nich zastępuje się odpowiednim kodowaniem dla strony (lewej lub prawej), na której jest włączony. Jeśli nadal jesteś zdezorientowany, zobacz poniższy obrazek.
Oto wynik w postaci binarnej z |
rurami oddzielającymi części.
101|0001101|0010011|0010011|0001101|0001101|0001101|01010|1100110|1101100|1001110|1110010|1000010|1000010|101
Wyzwanie
Napisz program, który wyprowadza kod kreskowy UPC-A do wprowadzenia przez użytkownika. Wymiary obrazu powinny wynosić 95 × 30 pikseli, przy czym każdy „bit” ma szerokość jednego piksela i wysokość 30 pikseli. Czarne paski są w, rgb(0, 0, 0)
a białe paski są konsekwentnie przezroczyste lub rgb(255, 255, 255)
.
Notatki
- Weź dane wejściowe ze standardowego wiersza poleceń lub wiersza poleceń albo napisz funkcję, która pobiera ciąg lub liczbę całkowitą (zwróć uwagę, że dane wejściowe mogą mieć zera na początku, a większość języków je usuwa lub zamienia liczbę na ósemkową).
- Wyjście obrazu w jeden z następujących sposobów:
- Zapisz go do wybranego pliku o nazwie i formacie (PNG, PBM itp.).
- Wyświetl go na ekranie.
- Wyjście danych pliku na standardowe wyjście.
- Nie możesz używać bibliotek lub wbudowanych kodów generujących kody kreskowe ( patrzę na ciebie, Mathematica ), chociaż możesz używać bibliotek graficznych lub graficznych.
- Ostatnia cyfra UPC jest zwykle cyfrą kontrolną , ale w tych celach nie musisz się o to martwić.
Przykłady
Oto kilka przykładów testowania kodu. Wyjście binarne podano również dla wygody.
Wejście: 012345678910
Wynik:
10100011010011001001001101111010100011011000101010101000010001001001000111010011001101110010101
Wejście: 777777222222
Wynik:
10101110110111011011101101110110111011011101101010110110011011001101100110110011011001101100101
Punktacja
To jest kod golfowy , więc wygrywa najkrótsza przesyłka (w bajtach). Tiebreaker przechodzi do najwcześniejszego postu.
["777777","222222"]