最近では、ほぼすべての店舗でUniversal Product Code(UPC)バーコードを使用して、チェックアウトプロセスを簡素化しています。名前があなたにとって何の意味も持たない場合、あなたは彼らがどのように見えるかを確実に認識するでしょう:
フォーマット
最も一般的なシステムはUPC-Aで、12桁を使用して特定の製品を表します。各桁は一連の黒と白のストライプにエンコードされ、マシンが7ビット長のコードを読み取れるようにします。バーコードの開始、中間、終了を示す合計11ビットのパターンがあります。これにより、バーコードの合計長は12×7 + 11 = 95ビットになります。(これから、各ビットの色を参照するためにバイナリが使用される場合、0
白と1
黒になります。)
開始と終了の両方のパターンがあり101
ます。次に、数字は6つの2つのグループに分割され、以下に示すようにエンコードされます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ピクセルで、各「ビット」は幅1ピクセル、高さ30ピクセルでなければなりません。黒のストライプが入ってrgb(0, 0, 0)
おり、白のストライプが常に透明またはになっていrgb(255, 255, 255)
ます。
ノート
- stdinまたはコマンドラインから入力を取得するか、文字列または整数を取得する関数を記述します(入力には先行ゼロが含まれることがあり、ほとんどの言語ではそれらを削除するか、数値を8進数に変換します)。
- 次のいずれかの方法で画像を出力します。
- 任意の名前と形式(PNG、PBMなど)でファイルに保存します。
- 画面に表示します。
- ファイルデータをstdoutに出力します。
- 画像またはグラフィックスライブラリを使用しても、バーコードを生成するライブラリまたはビルトインを使用することはできません(Mathematicaを参照しています)。
- UPCの最後の数字は通常チェックディジットですが、これらの目的のためにそれについて心配する必要はありません。
例
コードをテストするためのいくつかの例を次に示します。便宜上、バイナリ出力も提供されます。
入力: 012345678910
出力:
10100011010011001001001101111010100011011000101010101000010001001001000111010011001101110010101
入力: 777777222222
出力:
10101110110111011011101101110110111011011101101010110110011011001101100110110011011001101100101
得点
これはコードGolfですので、最短の提出(バイト単位)が勝ちです。Tiebreakerは最初の投稿に移動します。
["777777","222222"]