Mark My Mail 챌린지 에 대한 도움 덕분에 PPCG-Post는 생성 된 바코드로 모든 소포를 성공적으로 스탬프 처리했습니다!
이제 해독 할 차례입니다.
이 챌린지에서 프로그램은 Mark My Mail 챌린지 에서 생성 된 바코드가 주어지면이를 해독하고 인코딩 된 정수를 반환합니다.
그러나 조심하십시오! 바코드가 거꾸로되어있을 수 있습니다.
4 상태 바코드
인코딩 문제를 놓친 경우 어떤 종류의 바코드를 사용해야하는지 알아야합니다. 4 상태 바코드는 4 개의 가능한 상태를 가진 일련의 막대로, 각각 4 자리 정수를 나타냅니다.
| |
Bar: | | | |
| |
Digit: 0 1 2 3
ASCII로 렌더링 된 바코드는 파이프 ( |
) 문자를 사용하여 막대의 일부를 나타내고 공백 ( )을 사용하여 빈 섹션을 나타내는 세 줄의 텍스트를 사용합니다 . 각 막대 사이에 하나의 공백이 있습니다. 바코드 예는 다음과 같습니다.
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
바코드를 인코딩 된 정수로 다시 변환하려면 각 막대를 해당하는 기본 4 자리 숫자로 매핑하고이를 연결 한 다음 10 진수로 변환하십시오.
각 바코드는 거꾸로 되어도 다른 바코드를 나타내므로 시작 / 중지 시퀀스를 구현하여 오리엔테이션을 계산할 수 있습니다. 이 과제를 위해 Australia Post에서 지정한 시작 / 중지 시퀀스를 사용합니다. 각 바코드는 1 0
시퀀스로 시작하고 끝납니다 .
도전
당신의 임무는 ASCII 4- 상태 바코드가 주어지면, 그것을 분석하고 인코딩 한 정수를 반환하는 것입니다. 본질적으로 Mark My Mail 의 반대입니다 .
그러나 물건을 꾸미기 위해 잡기 가 있습니다. 바코드가 거꾸로 나올 수 있습니다. 실제와 마찬가지로 시작 / 중지 순서를 사용하여 올바른 방향 을 결정 하기 위해 바코드 리더 (프로그램)에 남아 있습니다 .
예:
다음과 같은 바코드가 있습니다 :
| | | | | | | | | | | | | | | | | | | |
우리는 숫자의 첫 번째와 마지막 쌍이 0, 2
아닌 것을 분명히 볼 수 있습니다 1, 0
. 즉, 바코드가 거꾸로되어 있으므로 올바른 방향을 얻으려면 각 막대를 뒤집는 것이 아니라 180도 회전 해야합니다 .
| | | | | | | | | | | | | | | | | | | |
이제 디코딩을 시작할 수 있습니다. 데이터를 인코딩하지 않기 때문에 시작 / 중지 시퀀스를 무시하고 각 막대를 해당하는 기본 4 자리 숫자에 매핑합니다.
| | | | | | | | | | | | | | | | | | | | --2010 3 3--
이것을 base-4 integer 2103023
에 연결 한 다음 9419
최종 결과 를 위해 10 진수로 변환합니다 .
규칙
- 입력은 항상 설명 된 시작 / 중지 시퀀스와 함께 위에서 설명한대로 ASCII로 렌더링 된 유효한 4 상태 바코드입니다.
- 후행 공백이나 줄 바꿈 및 후행 줄 바꿈 (골프에 적합한 형식)을 요청할 수 있습니다.
- 올바른 방향 일 수도 있고 아닐 수도 있습니다. 프로그램은 시작 / 중지 순서를 사용하여 거꾸로 읽을 지 여부를 결정해야합니다.
- base-4 정수에서 선행 0 자리를 인코딩하지 않습니다.
- 입력을 줄 목록 또는 줄 바꿈 문자열로 사용할 수 있습니다.
- 출력은 언어 표준 정수 기반의 정수 여야하며 바코드로 인코딩 된 데이터를 나타냅니다.
- 우표가 작고 코드에 아주 작은 코드를 넣을 수 있으므로 코드는 가능한 짧아야합니다. 이것은 코드 골프입니다 . 따라서 가장 짧은 프로그램 (바이트)이 이깁니다!
테스트 사례
| | | | | | | | | | | | | |
= 4096 (플 리핑)
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
= 7313145 ( 플 리핑 )
| | | | | | | | | | | | | | | | | | | |
= 9419 ( 플 리핑 )
| | | | | | | | | | | | | | | | | | |
= 990 ( 뒤집지 않음)
| | | | | | | | | | | | | | | | | | |
= 12345 ( 뒤집지 않음)
[String]
, [{#Char}]
, [{Char}]
, [[Char]]
?, 주어진 String
것과 같습니다{#Char}