Os dígitos de 7 segmentos podem ser representados em ASCII usando _|
caracteres. Aqui estão os 1
dígitos do tamanho :
_ _ _ _ _ _ _ _
| _| _| |_| |_ |_ | |_| |_| | |
| |_ _| | _| |_| | |_| _| |_|
Tamanhos maiores são formados, tornando cada segmento proporcionalmente mais longo. Aqui estão alguns dígitos de tamanho 3.
___ ___ ___ ___ ___ ___ ___
| | | | | | | | | |
| | | | | | | | | |
|___| |___ | |___ ___| | | |___|
| | | | | | | | | |
| | | | | | | | | |
|___| |___| | ___| ___| |___| ___|
Objetivo
Neste desafio, você deve escrever um programa / função que possa receber um único dígito como entrada e identificar seu tamanho. O problema: se a entrada não for um dígito válido, seu programa deverá ser exibido 0
.
Isso é código-golfe , o menor número de bytes vence.
Você pode escrever um programa ou uma função, que pode receber o dígito como STDIN ou um argumento, e imprimir / retornar o valor.
Os dígitos serão fornecidos como uma sequência de várias linhas, preenchida com a quantidade mínima de espaço em branco necessário para torná-lo um retângulo perfeito. A nova linha à direita é uma parte opcional da entrada. Não haverá espaços à esquerda desnecessários.
Quando um não dígito é passado, ele ainda será composto de _|
caracteres, preenchidos em um retângulo e não terá espaços iniciais desnecessários. Não haverá linhas em branco. Você não terá que lidar com entradas vazias.
A saída deve ser um número inteiro não negativo único, com nova linha à direita opcional. Se a entrada não for um dígito adequado de qualquer tamanho, faça a saída 0
. Senão, imprima o tamanho.
Aqui está um guia prático para as larguras e alturas de cada dígito para um determinado tamanho N
.
Digit Height Width (not counting newlines)
1 2N 1
2 2N+1 N+2
3 2N+1 N+1
4 2N N+2
5 2N+1 N+2
6 2N+1 N+2
7 2N+1 N+1
8 2N+1 N+2
9 2N+1 N+2
0 2N+1 N+2
Exemplos de E / S
No:
__
|
__|
|
__|
Fora:
2
No:
|
|
|
Fora:
0 //because it is of an invalid height. Either 1 char too short or tall.
No:
| |
| |
| |
|____|
|
|
|
|
Fora:
4
No:
___
|
|___
| |
|___|
Fora:
0 //1 char too wide
No:
_
|_|
| |
Fora:
0 //it's not a digit
No:
__
|
|__
|
__|
Fora:
2
No:
_ _
_| _|
|_ _|
Fora:
0 //both would be valid individually, but input should be a *single* digit
No:
_
|_|
|_|
Fora:
1
No:
|
|
Fora:
1
No:
__|_
|
_ |
_
|__
Fora:
0
Isso é aproximadamente o inverso do número de transformação no padrão de exibição de 7 segmentos , a partir de 3 anos atrás.
0
dígito de tamanho , existe? A menos que você tenha pensado em uma maneira de desenhá-los.Respostas:
Ruby, 250
Dado que existem tantas entradas possíveis inválidas, a única maneira de fazer isso era gerar todos os dígitos corretos e verificar se a entrada coincide.
Eu construo cada dígito de baixo para cima, em duas metades mais a linha superior. Embora existem 12 possibilidades (considerando que o segmento esquerdo pode ser ligada, desligada, ou, no caso de
3
e7
completamente ausente) apenas 7 são, na verdade, presente e escolha cuidadosa de codificação permite que toda a informação (excepto a linha de topo) a ser codificado numa caractere único.o dígito
1
realmente não se encaixa no padrão e é tratado separadamente, sendo usado para inicializar a matriz.Ungolfed in program program
Esta versão utiliza em
.
vez de espaços por razões de diagnóstico.fonte