Nahezu jedes Geschäft verwendet heutzutage UPC-Barcodes ( Universal Product Code ), um den Bestellvorgang zu vereinfachen. Wenn der Name Ihnen nichts bedeutet, werden Sie sicherlich erkennen, wie sie aussehen:
Format
Das gebräuchlichste System ist UPC-A, bei dem jedes Produkt aus 12 Ziffern besteht. Jede Ziffer ist in eine Reihe von schwarzen und weißen Streifen codiert, damit Maschinen den Code lesen können, eine Länge von sieben Bits. Es gibt insgesamt Muster im Wert von 11 Bits, die den Anfang, die Mitte und das Ende des Barcodes angeben. Dies ergibt eine Gesamtlänge des Barcodes von 12 × 7 + 11 = 95 Bit. (Von nun an ist, wenn Binär zur Bezeichnung der Farbe jedes Bits verwendet wird, 0
Weiß und 1
Schwarz.)
Der Anfang und das Ende haben beide ein Muster von 101
. Die Ziffern werden dann in 2 6er-Gruppen unterteilt und wie unten dargestellt mit einem Muster 01010
zwischen der linken und der rechten Gruppe codiert . In dieser Tabelle ist das Muster für jede Nummer aufgeführt. Beachten Sie, dass das Muster unterschiedlich ist, je nachdem, ob sich die Ziffer auf der rechten oder der linken Seite befindet. (Dadurch kann der Barcode verkehrt herum gescannt werden.) Das Muster für die rechte Seite ist jedoch das Gegenteil (Schwarz gegen Weiß tauschen und umgekehrt) des Musters für die linke Seite.
Wenn Sie das obige Bild nicht sehen können, ist dies das binäre Äquivalent jeder Zahl.
# 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
Beispiel
Angenommen, Sie haben den UPC 022000 125033
. (Das sind keine Zufallszahlen. Hinterlassen Sie einen Kommentar, wenn Sie deren Bedeutung herausfinden.) Sie beginnen mit diesem Kesselschild, das in jedem Barcode gleich ist:
101xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx01010xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx101
Für die Ziffern ersetzen Sie jede durch die entsprechende Kodierung für die Seite (links oder rechts), auf der sie sich befindet. Wenn Sie immer noch verwirrt sind, sehen Sie sich das Bild unten an.
Hier ist die Ausgabe in Binärform mit |
Rohren, die die Teile trennen.
101|0001101|0010011|0010011|0001101|0001101|0001101|01010|1100110|1101100|1001110|1110010|1000010|1000010|101
Herausforderung
Schreiben Sie ein Programm, das den UPC-A-Barcode für die Benutzereingabe ausgibt. Die Abmessungen des Bildes sollten 95 × 30 Pixel betragen, wobei jedes "Bit" ein Pixel breit und 30 Pixel hoch ist. Schwarze Streifen sind in rgb(0, 0, 0)
und weiße Streifen sind durchgehend transparent oder rgb(255, 255, 255)
.
Anmerkungen
- Nehmen Sie die Eingabe von stdin oder der Befehlszeile entgegen oder schreiben Sie eine Funktion, die einen String oder eine Ganzzahl annimmt (beachten Sie, dass die Eingabe führende Nullen haben kann und die meisten Sprachen diese entfernen oder die Zahl in Oktal konvertieren).
- Geben Sie das Bild auf eine der folgenden Arten aus:
- Speichern Sie es in einer Datei mit einem Namen und einem Format (PNG, PBM usw.) Ihrer Wahl.
- Zeigen Sie es auf dem Bildschirm an.
- Die Dateidaten werden an stdout ausgegeben.
- Sie dürfen keine Bibliotheken oder eingebauten Elemente verwenden, die Barcodes generieren ( ich sehe Sie, Mathematica ), obwohl Sie möglicherweise Bild- oder Grafikbibliotheken verwenden.
- Die letzte Ziffer eines UPC ist normalerweise eine Prüfziffer , aber für diese Zwecke müssen Sie sich keine Sorgen machen.
Beispiele
Hier sind einige weitere Beispiele, mit denen Sie Ihren Code testen können. Der Binärausgang ist auch der Einfachheit halber angegeben.
Eingang: 012345678910
Ausgabe:
10100011010011001001001101111010100011011000101010101000010001001001000111010011001101110010101
Eingang: 777777222222
Ausgabe:
10101110110111011011101101110110111011011101101010110110011011001101100110110011011001101100101
Wertung
Dies ist Codegolf , daher gewinnt die kürzeste Einreichung (in Bytes). Tiebreaker geht zum frühesten Beitrag.
["777777","222222"]