오늘날 거의 모든 매장에서 UPC ( Universal Product Code ) 바코드를 사용하여 결제 프로세스를 단순화합니다. 이름이 당신에게 아무 의미가 없다면, 당신은 그들이 어떻게 생겼는지 알 것입니다 :
체재
가장 일반적인 시스템은 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 또는 명령 행에서 입력을 가져 오거나 문자열 또는 정수를 사용하는 함수를 작성하십시오 (입력에 선행 0이있을 수 있으며 대부분의 언어는이를 제거하거나 숫자를 8 진수로 변환 함).
- 다음 방법 중 하나로 이미지를 출력하십시오.
- 선택한 이름과 형식 (PNG, PBM 등)으로 파일에 저장하십시오.
- 화면에 표시하십시오.
- 파일 데이터를 stdout으로 출력하십시오.
- 이미지 또는 그래픽 라이브러리를 사용할 수 있지만 바코드를 생성하는 라이브러리 또는 내장을 사용할 수 없습니다 ( Mathematica ).
- UPC의 마지막 숫자는 일반적으로 검사 숫자 이지만 이러한 목적으로 걱정할 필요는 없습니다.
예
다음은 코드를 테스트하는 몇 가지 예입니다. 이진 출력도 편의상 제공됩니다.
입력: 012345678910
산출:
10100011010011001001001101111010100011011000101010101000010001001001000111010011001101110010101
입력: 777777222222
산출:
10101110110111011011101101110110111011011101101010110110011011001101100110110011011001101100101
채점
이것은 코드 golf 이므로 가장 짧은 제출 (바이트 단위)입니다. Tiebreaker는 가장 빠른 게시물로갑니다.
["777777","222222"]