Tarefa
A tarefa é exibir qualquer um dos 128 estados possíveis de uma exibição de 7 segmentos .
Seu programa deve aceitar uma seqüência de 7 caracteres ("bits") que são 0
ou 1
. O primeiro bit de entrada corresponde ao segmento A da ilustração a seguir, o segundo a B, etc (ignorar dp
):
A decisão de como você representa a exibição - um único símbolo Unicode ou ASCII, arte ASCII , graficamente, ou o que você puder criar. No entanto, cada entrada deve ter sua própria saída distinta. Se você criar algo sofisticado, tenho certeza de que pode obter votos positivos, mostrando alguns exemplos.
Todos os 128 estados possíveis da tela são:
Regras
- Codegolf
- Como eu disse, qualquer tipo de saída é permitida, mas seria bom se você a especificasse.
- A entrada pode ser stdin ou argumento de linha de comando.
Exemplos
Entrada
1101101
Saída
Como ASCII / Unicode:2
Diferentes tipos de arte ASCII (não sou muito bom nisso)
_ ╺┓ ╒╗ ---
_| ┏┛ ╔╝ |
|_ ┗╸ ╚╛ ---
|
---
Respostas:
J (51)
saída:
fonte
1 2 1#"1' #'{~5 3$,0,.502 A.".&>1!:1]1
.C, 106
O tamanho é de 74 caracteres se for permitido renomear o programa "W00WG5WW1GW66WG4WW2GW33WG"
corrida:
notas:
'W' e 'G' (0x47 e 0x57) são escolhidos de forma que o valor & 7 = 7, ou seja, eles indexem com segurança o caractere nulo que termina a string de entrada.
fonte
Brainfuck - 224
Imprime usando pontos de exclamação:
Não é o mais legível, mas também não é horrível.
Surpreso com a proximidade de não ser o último lugar.
fonte
Postscript
121107requer
n
que seja definido como a sequência a ser processada, para chamar comopara obter
o conjunto completo é
fonte
Mathematica:
135129118, exibição de imagemespaços adicionados "para maior clareza"
Editar
Para os usuários exigentes do site: Sem usar uma máscara externa:
fonte
&
.&
.APL,
5855Exemplo de entrada:
Saída:
⍞='1'
pega a entrada como uma matriz de caracteres e a converte em uma matriz numérica.1 2 2 1 2 2 1×⍞='1'
converte essa matriz em:0
for blank,1
for_
,2
for|
(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
atribua esse array a variávelx
e reordene para representar os segmentos F, G, B, E, D, C0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
concatena um espaço em branco, segmento A e outro espaço em branco na frente3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
remodelar para uma matriz 3x31+3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
converte em indexação baseada em 1Finalmente, usa a string
' _|'
para converter indicações em caracteresEditar
Corte 3 caracteres, concatenando a
0
para frente da matriz e usando indicações duplicadas, impedindo uma atribuição de variávelfonte
{
é 1 caractere menor que a indexação de colchetes[]
.PHP 66 bytes
Uma ligeira melhoria usando uma
md5
fórmula mágica, mas requer 3 bytes adicionais binários:¡
,æ
, eÚ
são caracteres 161, 230, e 218, respectivamente. Ele deve funcionar como está se for copiado diretamente e salvo como um formato ANSI.Bytes de PHP 73 (70)
Se você me permitir três caracteres binários, isso poderá ser reduzido para 70 bytes :
onde
ƒ
,ß
eõ
são caracteres 131, 223, e 245, respectivamente.Recebe entrada como um argumento de linha de comando. Uso da amostra:
fonte
php.ini
(por padrão, eles já estão) ou, para testar, você pode anexar o seguinte código ao script:<? error_reporting(E_ALL & ~E_NOTICE); ?>
JavaScript + jQuery + HTML + CSS (
210201)Esta solução usa sprites CSS e a imagem fornecida como exemplo :
HTML (3)
CSS (
8271)Obrigado ao xem pelo truque " background: url ":
JavaScript (125 após a remoção de novas linhas adicionadas aqui para facilitar a leitura)
Teste online: http://jsfiddle.net/zhqJq/3/
fonte
<p>
tag e evitardisplay:block
a CSS para economizar espaçoR (65 caracteres):
Baseia-se em algumas aproximações soltas para alguns números transcendentais ...
fonte
Python 2-65
Exemplo:
fonte
PostScript:
53 binários, 87 ASCII52 binários, 86 ASCIIHexdump do programa usando tokens binários:
Baixe este arquivo para testá-lo.
Usando tokens ASCII:
O primeiro
forall
loop coloca todas as coordenadas necessárias na pilha. As coordenadas são armazenadas em uma sequência para minimizar o espaço necessário. As coordenadas estão na ordem inversa, ou seja, os últimos 4 caracteres são do segmento A. Traçamos uma linha de(0,8)
a(4,8)
para este segmento (na verdade, precisamos adicionar 48 a todas as coordenadas, porqueforall
coloca todos os códigos ASCII na pilha).A segunda
forall
percorre todos os0
s e1
s na cadeia de entrada e os transforma em um valor de cinza.0
s são desenhados em branco (valor cinza 1) e1
es são desenhados em preto (valor cinza 0). Em seguida, usamos as coordenadas que o primeiroforall
loop deixou na pilha para desenhar as linhas.Invoque o programa usando Ghostscript, assim como o de Geoff Reedy:
Isso exibe:
fonte
neg 49 add
(o que é incrível)1 and
.not 1 and
, certo? Ainda salva um byte em ASCII e binário.bitshift
é uma palavra tão longa.APL
101 86 7369A entrada é da tela via ⍞
Que produz uma matriz de caracteres 9x5 composta por espaços em branco e ⎕ da seguinte maneira:
O número de sete dígitos é convertido em um vetor de partição para selecionar as coordenadas ⎕.
fonte
Mathematica
1121031009688, usando gráficosfonte
[123]
[[123]], nemIntegerDigits[123]
funciona para mim. Recebo apenasz
, sem destaque.Python (107)
Definitivamente mais jogável.
Saída:
Explicação:
fonte
Python 2.7 (93 caracteres):
Explicação:
Com a entrada stdin, use um operador ternário improvisado para fornecer
*
verdadeiro e um espaço para falso. Pegue esses valores e conecte-os a uma instrução de formato no formato da tela de 7 dígitos. Seriam no máximo 83 caracteres se a tela funcionasse assim:mas a encomenda demora mais tempo. Alguém tem uma maneira de contornar isso?
Exemplo:
fonte
print' {0}\n{5} {1}\n {6}\n{4} {2}\n {3}'.format(*[' *'[i=='1']for i in raw_input()])
há necessidade de colchetes e espaço para a declaração de impressão.>'0'
vez de=='1'
einput()
(com backticks ao redor, mas isso não aparecerá por causa da formatação aqui) em vez deraw_input()
.x = `input()`
Eu pensei que precisávamos de uma resposta lispy ...
Clojure, 159 caracteres
O acima será executado no REPL e fornecerá a resposta correta. Por exemplo:
Jogando números nele com pequenas modificações:
rendimentos:
Não é fácil de ler, mas eles estão lá!
fonte
Javascript 123
Eu posso diminuir a contagem de caracteres (101) se usarmos apenas um caractere para o estado "on", mas é menos legível:
fonte
Postscript 136
Não vencedor, mas uma abordagem diferente.
Espera que a sequência de entrada esteja na pilha:
Este é ainda pior. 294 para criar um bitmap "binário". Demorei um pouco para lembrar que cada linha é preenchida com um byte uniforme. Portanto, um bitmap 3x5 tem cinco bytes, com os bits de 3 msb significativos.
A saída é tão feia quanto a outra. :(
Tudo bem, aqui está um que parece bom. 190
Edit: Foi de cabeça para baixo e para trás. Corrigido agora.
fonte
Mathematica 264
Para que a saída pareça correta, são necessários muitos bytes, portanto, não há charuto neste momento. Mas aqui está o código detalhado (264 caracteres) de qualquer maneira.
O conjunto completo de caracteres:
Os dígitos:
fonte
PHP - 155 caracteres
seria 150 caracteres se usarmos a declaração de matriz do tipo php 5.4, mas eu não tenho isso instalado no meu laptop, então não pude testá-lo.
Amostra coloca.
Explicação:
Primeiro, eu dividi a exibição de 7 segmentos em cinco linhas e três colunas. Com a 1ª, 3ª e 5ª linha, mantenha '-' na coluna do meio e, caso contrário, espaço.
A 2ª e 4ª linha têm um tubo '|' caractere na primeira e na última coluna. Agora a presença desses caracteres deve ser guiada pelos valores de entrada.
Criei uma tabela de pesquisa, que é basicamente duas tabelas de pesquisa. Primeiro para o cálculo dos valores da 1ª, 3ª e 5ª linha. E outro no deslocamento 2 (3º item) para o cálculo das linhas 2 e 4.
fonte
Java - 204 caracteres
Saída de amostra:
Formatado corretamente:
Realmente gostaria de poder evitar isso por loop, mas tentei algumas outras coisas e elas foram todas mais longas. Provavelmente existe uma maneira melhor de fazer isso, mas esta é a minha primeira tentativa no código de golfe. (E Java é a pior linguagem para ela, e é por isso que achei interessante.) Até o Brainfuck me derrotou, mas pelo menos minha saída parece melhor.
EDIT: pode se livrar de "público" na classe, me salva 7 caracteres!
E obrigado, daniero, por me mostrar printf! (18 caracteres salvos)
Reescreva o formato de saída, altere os literais de caracteres para decimais, 12 caracteres salvos.
fonte
printf
método algumas versões anteriores, que é basicamenteprintln
eformat
em uma (como a função C); Isto vai poupar alguns caracteres,for
laço e a parte atualização em um, salvando um caractere:for(int i=7;i>0;c[--i]=a[0].charAt(i)==49?(i%3==0?95:'|'):32);
VBA - 263
É feio, mas funciona, eu acho. Estou tendo problemas para visualizar a ordem de bits adequada, portanto deduzo das respostas dos outros. Mesmo que a peça esteja errada, o comprimento do código deve permanecer o mesmo.
fonte
VBScript - 178 caracteres
fonte
CJam - 29
CJam é uma nova linguagem que estou desenvolvendo, semelhante ao GolfScript - http://sf.net/p/cjam . Aqui está a explicação:
l
lê uma linha da entrada0
é o número 0N
é uma variável pré-inicializada para a nova linha string]
reúne os elementos na pilha em uma matrizs
converte um valor (a matriz) em string, acrescentando assim um zero e uma nova linha à entrada fornecida7078571876784728737
é um number (o mesmo número que usei em python, mas estava em hexadecimal lá)A
é uma variável pré-inicializada para 10b
faz uma conversão base, gerando a matriz [7 0 7 8 ... 3 7]\
troca os dois últimos valores na pilhaf=
aplica o=
operador (aqui, acesso à matriz indexada) na sequência de entrada (mais zero e nova linha) e cada número 7, 0, 7, ...O índice 7 corresponde ao zero acrescentado e 8 corresponde à nova linha anexada.
Minha solução python faz exatamente a mesma coisa (exceto que a separação de dígitos é feita via conversão de string)
fonte
VBA, 188 caracteres
Observe que esse deve digitar 188 caracteres se incluir apenas espaço em branco obrigatório - o IDE o expande quando você o copia no editor VBA.
Infelizmente, o VBScript não possui uma matriz de bytes fortemente tipada, ou essa pode ser muito menor usando esse método.
fonte
Javascript (ECMAScript 2016) - 108 bytes
Isso provavelmente pode ser golfed mais, mas eu não consigo pensar em nada.
fonte
JavaScript, 148 bytes
Experimente online! (Rodapé é Node.js para ler
.input.tio
)Aceita entrada de ABCDEFG em sinalizadores binários e retorna:
fonte
SmileBASIC, 136 bytes
A saída é gráfica.
fonte
05AB1E , 4 bytes
Experimente online ou verifique todas as entradas possíveis .
Veja o link verificar todas as entradas possíveis acima para ver o mapeamento usado para cada entrada.
Explicação:
Isso abusa das regras em que afirma:
Alternativa mais no espírito do desafio, usando o formato de saída:
38 bytes :
Definitivamente pode ser jogado ..
Experimente online ou verifique todas as entradas possíveis .
Explicação:
Veja este 05AB1E ponta do meu ( seção Como comprimir grandes inteiros? ) Para entender por que
•L7ו
é1367524
.fonte
PHP 5.6, 65 bytes ASCII simples
ou, sem uma quebra de linha à direita, mas com um pouco de diversão:
Execute como pipe
-nR
ou experimente-os online .repartição 1
repartição 2
fonte