Escreva o programa mais curto que receberá uma sequência de números (de pelo menos 20 comprimentos) como entrada e exiba a saída usando os números de estilo do relógio digital padrão. Por exemplo, para a entrada 81, uma solução com saída ascii daria:
_
|_| |
|_| |
A saída gráfica também é aceitável, se ajudar.
Respostas:
APL (Dyalog) (45)
A cadeia,
ા8धगɯેࣃଏ૽
são os caracteres unicode2750 56 2343 2327 623 2759 2777 2243 2831 2813
(no entanto, você deve apenas copiar e colar). Eles codificam os números. O programa lê uma linha do teclado.Explicação:
1+⍎¨⍞
: leia uma linha do teclado, analise cada caractere como um dígito e adicione 1 a cada número (as matrizes APL são baseadas em 1 por padrão).⎕UCS'ા8धगɯેࣃଏ૽'[
...]
: selecione os caracteres pertencentes aos dígitos dos números digitados e procure os valores Unicode.{
...}¨
: para cada um desses valores, faça:1+⍵⊤⍨9⍴3
: obtenha os 9 primeiros dígitos da base 3 do valor expresso em base 3 e adicione 1 (porque as matrizes são baseadas em 1).' _|'[
...]
: selecione um espaço, linha horizontal ou linha vertical, dependendo desses dígitos3 3⍴
: formate como uma caixa 3 por 3.fonte
Funciton
Não é realmente um idioma adequado para jogar golfe ... mas, independentemente disso, tentei manter o tamanho do código o menor possível - um desafio bem diferente do que nas linguagens "comuns". São 1555 caracteres ou 3110 bytes (se codificado como UTF-16; UTF-8 é maior).
Aqui está uma captura de tela do programa em execução. Realmente funciona :)
Como isso fica feio no StackExchange devido ao espaçamento extra de linhas, considere executar o seguinte código no console JavaScript do navegador para corrigir isso:
$('pre').css('line-height',1)
Provavelmente poderia ser menor se eu não tivesse cometido um erro devido ao qual a saída estava voltada para a frente; Corrigi isso adicionando uma função extra para reverter a entrada. Caso contrário, eu provavelmente teria que reescrever tudo isso.
Também cometi outro erro (trocar os operandos em duas chamadas para
‼
), o que tornava necessário declarar a‡
função extra , mas essa é tão pequena que cabe dentro da função principal e, portanto, não adiciona nenhum caractere!fonte
wxpython, muitos caracteres
Teste
ps: não é uma entrada séria, mas parece que a saída gráfica também é aceitável, então tentei :-)
fonte
Golfscript - 66 caracteres
xxd
: (usexxd -r
para reverter)Isso segue a maioria das outras respostas, pois não há espaços entre os números e os espaços à direita são mantidos. Um espaço entre os números pode ser facilmente adicionado com
1+
antes{"_ |"=}%
. Empacotado em um número base 3 e, em seguida, como base 243 em uma sequência.fonte
J,
90,7868 caracteres[ atualização: usando codificação unicode (1 byte):
funciona como antes:]
A chave está na codificação de dígitos como números inteiros base 3. Zero, por exemplo, é:
ou
' _ | ||_|'
, que se torna 010202212 3 = 2750.fonte
http://codegolf.stackexchange.com/q/1000
)Mathematica
205 209 198179Uso
fonte
JavaScript (145)
148145Como o JavaScript realmente não tem entrada / saída padrão, isso é escrito como uma função que pega uma string e retorna a saída como uma string.
Espaçados:
Veja como funciona:
Os três primeiros bits são para a primeira linha, etc.
Em cada grupo de três bits, o primeiro especifica se o primeiro caractere é
|
ou o espaço, o segundo se é_
ou o espaço e o terceiro novamente|
ou o espaço.Esses três bits são recuperados como
c&1
,c&2
ec&4
, que são usados como índices na cadeia de caracteresb
.Em cada iteração,
i%L
é a “coordenada x”, ou seja, o dígito na entradan
Em cada iteração,
i/L
é a “coordenada y”, ou seja, a linha, mas precisamos|0
torná-la um número inteiroFinalmente, os espaços entre os dígitos e as novas linhas entre as linhas também são recuperados pela indexação em
b
, reutilizando o caractere de espaço e a posição 3 não utilizada nessa sequência! :)fonte
Ruby, 142
espera entrada na variável
x
. exemplos:fonte
Golfscript - 97 caracteres
fonte
Windows PowerShell, 127
Como as seqüências contêm alguns caracteres desagradáveis para escrever, um hexdump para sua conveniência:
fonte
gForth,
186175 caracteresNova versão:
Isso na verdade incomoda sair (+3 caracteres) também :). Aqui está a versão mais legível, ela faz uma compactação de bits para reduzir o tamanho da LUT em 1/3, mas o código resultante é mais complexo e, portanto, não economiza muito:
Versão antiga:
Isso deixa a pilha desequilibrada e não se incomoda em sair do intérprete. Aqui está uma versão mais limpa e legível
fonte
Personagens C # 369
Eu poderia facilmente cortar alguns caracteres. O ponto era mais abusar do LINQ :)
Mais versão em espaço em branco:
fonte
using
es (409). Depois, há alguns espaços em branco desnecessários que podem ser removidos (402). A tarefa afirma que o espaço em branco entre os dígitos deve ser omitido (399).g
é usado apenas uma vez, para que você possa salvar 7 caracteres inserindo-o.b
também é usado apenas uma vez, para que você possa incorporá-lo também. Além disso, você pode salvar muitos caracteres se alterar a matriz inteira para"{H=mNgwI\x7fo"
, ou ainda menor, se alterar\x7f
para o caractere real # 127 (que não é imprimível, mas é permitido). O>>
ainda funcionará porque há uma conversão implícita dechar
paraint
..ToCharArray()
e o.ToArray()
são tanto redundante, você pode simplesmente removê-los :)Solução Java:
585570 CharsEu não acho que vou tentar mais jogar golfe em Java ...
fonte
Python,
218180176b=map(int,raw_input());a=map(int,bin(914290166014670372457936330)[2:]);c=' |_';p=lambda k:''.join(c[a[9*n+k]]+c[2*a[9*n+1+k]]+c[a[9*n+2+k]]for n in b)+'\n';print p(6)+p(0)+p(3)
Com quebras de linha:
fonte
Bash, 11 caracteres
Sim, eu sei, estou trapaceando.
Você precisa ter o banheiro instalado.
fonte
figlet
também funcionaria.Java, 2.095
E / S DE AMOSTRA
fonte
D: 295 caracteres
Mais legivelmente:
fonte
Ocaml, 268
Versão legível
fonte
Perl (
182180)lê de STDIN.
fonte
Ghostscript
(270)(248)(214)Edit: Mais substituições. Removido espaço entre dígitos.
Edit: Ainda mais substituições. O loop principal agora se parece com o que faz!
Usa o recurso de processamento de argumentos do ghostscript: invoke with
gs -dNODISPLAY -- digit.ps 012 345 6789
.fonte
Delphi || 453 (568 com formato)
Nem perto o suficiente para vencer, mas foi divertido fazer ^. ^
Com formato
fim.
fonte
PHP,
140136133131129128 bytesEu poderia economizar mais
57 com ascii estendido: um para"| _"
e com a quebra de linha, três para~"z/]{4lno~|"
(a negação bit a bit transformaria tudo em caracteres ascii estendidos = sem caracteres especiais, e o PHP não precisa de aspas), dois para-1
(é apenas lá para manter o mapa no padrão ASCII). Mas, para facilitar a leitura e a compatibilidade, permaneço com ascii padrão.o bitmap
_
,|_|
,|_|
como bits-6-
,024
,135
(número de bits & 2 0 é para LEDs verticais)[123,48,94,124,53,109,111,112,127,125]
"z/]{4lno~|"
~"z/]{4lno~|"
(permite abreviação ternária na seleção de caracteres)o modelo
7
para os espaços ->767
,024
,135
701
,623
,745
(torna$p=0
obsoleto)547326107
(leia o mapa da direita para a esquerda; permite looping aritmético)5473261070
(permite combinar turno com teste na cabeça do loop)753754680
(dois bytes mais curtos: um dígito e o prefixo)demolir
fonte
ord(~"z/]{4lno~|v.J=NF"[hexdec($c)])-1
Java 8, 280 bytes
Explicação:
Experimente aqui.
Como função, seriam 218 bytes .
fonte
Python, 227 caracteres
Simples e direto.
fonte
Perl, 145 caracteres
Ungolfed:
fonte
Python 3.4.3 -
1514858 bytesA tentação de resolver isso foi grande demais para não se inscrever e responder = P
Sou um pouco novo em Python, então formatei meu programa de maneira agradável e arrumada (ou pelo menos o fiz). Melhorias são muito apreciadas!
Editar: nomes de variáveis encurtados, usados; para diminuir, apenas um espaço no final dos números de saída definiu variáveis de uma só vez.
Novas linhas são 2 bytes (CRLF) e usei tabulações em vez de 4 espaços.
fonte
SmileBASIC, 216 bytes
Usando gráficos em vez de texto, porque provavelmente é mais curto.
Explicação:
fonte
C ++,
230229225223218207204198 bytesLê de stdin e produz para stdout.
Explicação:
fonte
Powershell, 114 bytes
Script de teste:
Saída:
Ideia principal:
Cada número de estilo de relógio digital padrão contém 3 linhas. Além disso, a primeira linha contém apenas 2 opções. Um total de 6 opções. Portanto, 7 bits são suficientes para codificar cada dígito.
Portanto, a string
f-SR5Z^mvr
codifica todos os segmentos para todos os números de estilo de relógio digital padrão.Nota: A ordem do
line str
foi especialmente selecionada para que todos os códigos estivessem no intervalo32..126
.fonte