Códigos de barras de 4 estados
Muitos serviços postais (Royal Mail UK, Correio do Canadá, Correio dos EUA, etc.) usam um código de barras de quatro estados para codificar informações sobre seus e-mails. Renderizado em ASCII, pode ser algo como isto:
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Um código de barras de 4 estados é uma linha de barras. Cada barra pode ser estendida para cima, para baixo ou ambas, permitindo quatro possibilidades. Isso significa que cada barra representa essencialmente um dígito de base 4:
| | Bar: | | | | | | Dígito: 0 1 2 3
O problema com esta simbologia é que cada código de barras é um código de barras diferente válido e de cabeça para baixo: alterando drasticamente o significado se a orientação estiver incorreta. Portanto, uma sequência de início e parada é normalmente implementada para que o scanner possa calcular de que maneira deve ser lido.
Para o objetivo deste desafio, usaremos a sequência de início / parada especificada pelo Australia Post: cada código de barras começa e termina com uma 1 0
sequência.
O desafio
Sua tarefa é escrever um programa ou função que, dado um número inteiro positivo N
, o converta em um código de barras ASCII de 4 estados, onde cada barra (exceto as seqüências de início / parada) representa um dígito na representação de base 4 de N
.
Exemplo:
Dado o número inteiro 19623
, primeiro o converteríamos em sua representação base-4 10302213
,.
Em seguida, mapeamos cada dígito para a barra correspondente:
1 0 3 0 2 2 1 3 | | | | | | | | | | | | | | | |
Por fim, adicionaríamos as seqüências de início / parada:
Inicio fim: 1 0 1 0 | | | | | | | | | | | | | | | | | | | | | |
O código de barras resultante deve ser a saída do programa.
Regras:
- A entrada será um número inteiro positivo, dentro do intervalo do tamanho inteiro padrão do seu idioma.
- A saída:
- Pode ser uma lista de linhas ou uma sequência contendo novas linhas.
- Pode conter novas linhas / espaços iniciais ou finais, desde que a forma permaneça intacta.
- Deve mostrar o código de barras com o formato acima - ele deve usar o caractere de barra vertical (
|
) e o caractere de espaço () ao desenhar barras, e deve haver 1 espaço entre cada barra vertical.
- Isso é código-golfe , então o programa mais curto (em bytes) vence!
Casos de teste
4095:
| | | | | | | | | | | | | | | | | | | | | | | |
4096:
| | | | | | | | | | | | | |
7313145:
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |