Escreva um programa que utilize uma sequência não vazia dos dígitos de 0 a 9 e imprima como eles seriam mostrados em uma exibição de sete segmentos usando barras ( /
, \
).
Estas são as formas precisas dos dígitos:
/\
\ \
\/
\
\
/\
/
\/
/\
/\
/
\
\/\
/
\/\
/
/
\/\
\/
/\
\
/\
\/\
\/
/\
\/\
/
Quando um dígito ocorre após o outro, eles são encadeados na diagonal para cima e para a direita, com um espaço diagonal no meio. Então, por exemplo, 203
seria o seguinte:
/\
/\
/\ /
\ \
/\ \/
/
\/
Observe que o 1
personagem ocupa a mesma quantidade de espaço que os outros. As duas linhas do 1
estão no lado direito da tela, não no esquerdo.
Então 159114
seria assim:
\
\/\
\
\
\
\
/\
\/\
/ /
\/\
\ /
\
Pode haver qualquer quantidade e combinação de novas linhas ou espaços iniciais / finais na saída, desde que os dígitos estejam na posição correta em relação um ao outro.
Portanto 159114
, isso também seria válido:
\
\/\
\
\
\
\
/\
\/\
/ /
\/\
\ /
\
Pegue a entrada do stdin ou da linha de comando ou escreva uma função que aceite uma string. Imprima o resultado em stdout ou poderá devolvê-lo como uma sequência se escrever uma função.
Qualquer cadeia não-vazia dos dígitos de 0 a 9 deve funcionar, incluindo cadeias de dígitos simples (por exemplo 8
) e cordas com zeros (por exemplo, em 007
, os zeros não precisam de ser impresso).
O código mais curto em bytes vence.
Respostas:
CJam,
777170696362 bytesTodos os caracteres são imprimíveis, portanto, copiar e colar deve funcionar perfeitamente.
Experimente online no intérprete CJam .
Idéia
Começamos examinando o número de dígitos n na entrada e pressionando um quadrado de espaços grandes o suficiente para cobrir a saída. Na implementação, esse quadrado será codificado como uma matriz bidimensional de cadeias de caracteres de um caractere.
Um quadrado de comprimento 2n + 1 seria o correto (ou seja, nenhum espaço em branco ao redor) para uma implementação direta, mas usaremos um comprimento de 5n para salvar alguns bytes. Felizmente, o espaço em branco circundante é permitido.
Se invertermos as linhas da representação de sete barras de 8 , obteremos o seguinte:
A representação de todos os dígitos podem ser codificado como um inteiro de 8 bits, onde o i th bit é 0 sse o i th personagem deve se substituído por um espaço. Para os dígitos de 0 a 9 , os números inteiros resultantes são
que correspondem aos seguintes caracteres ISO-8559-1:
Para cada posição na entrada, depois de seleccionar o número inteiro de 8 bit correspondente, repetimos o i th carácter da representação de 8 exactamente um i vezes, onde uma i é o i th bits do número inteiro. Isso empurra uma matriz de seqüências de caracteres de um ou zero caracteres. Ao dividir essa matriz em partes de comprimento 3, obtemos uma matriz em que cada elemento corresponde a uma linha da representação.
Agora, calculamos o máximo vetorizado das strings que representam o quadrado e as strings que representam o dígito. As strings
, portanto, elas substituirão os espaços no quadrado. A cadeia vazia, no entanto, é menor que a cadeia
, portanto, cadeias vazias na representação de dígitos preservarão os espaços no quadrado.
/
e\
são maiores que a stringAgora giramos as linhas e colunas por duas unidades para colocar a seguinte representação de dígitos na parte apropriada do quadrado e repetimos o processo para os dígitos restantes na entrada.
Finalmente, invertemos cada linha e inserimos um avanço de linha entre as linhas individuais.
Código
As últimas rotações atrapalhariam a saída se o comprimento lateral do quadrado fosse menor que 2n + 3 . Como 5n ≥ 2n + 3 para todos os números inteiros positivos n , o quadrado é grande o suficiente para evitar isso.
fonte
Python 3,
189183174 bytesA compressão parece boa para mim, mas estou tendo problemas para encontrar uma boa maneira de abandonar as sete variáveis ...
Felizmente, a especificação é bastante relaxada nas regras de espaço em branco, porque há muito espaço em branco inicial / final.
Expandido:
Explicação
As posições de segmento representadas pelas variáveis são:
Cada segmento é codificado por um único caractere Unicode de 2 bytes. Por exemplo,
ϻ
codificag
o segmento da seguinte maneira:Na verdade,
2
é o único dígito a não usar o segmento inferior direito de uma tela de sete segmentos.fonte
C,
1098345323319 bytesPrimeiraSegundaTerceira tentativa. Finalmente decidiu abandonar o buffer de tela para salvar alguns bytes. Este programa pega um parâmetro de dígitos e imprime os dígitos no formato de 7 segmentos.Participante da primeira vez. Apenas por diversão. Seja gentil.
Expandido, sem aviso:
fonte
JavaScript,
192178167162 bytesUso:
f("1337");
retornaráEle usa os recursos do ES6 e pode ter algum comportamento dependente da implementação devido à omissão de ponto e vírgula e parênteses, mas funciona no Firefox.
Expandido:
Explicação:
l
é uma matriz que contém 10 caracteres de byte único que correspondem à forma de cada dígito. Por exemplo, o dígito 0 é representado pelo caractereî
:Os caracteres de entrada são usados como chaves para a matriz, mantendo sua forma representando as contrapartes, que são lidas pouco a pouco.
fonte
==0
e==1
realmente necessários antes?
. Int não é considerado booleano em js? @Regret"w\x05k/\x1D>~\x07\x7F?"
com cada caractere revertido bit a bit"\xee\xa0\xd6\xf4\xb8|~\xe0\xfe\xfc"
, cada um deles pode ser impresso. Isso dá mais 8 bytes. Embora, não é suficiente ...f=(x)=>{}
- eles não são necessários com apenas um argumento.Perl - 103 bytes
O texto acima contém 6 caracteres não imprimíveis (a fonte pode ser baixada em Ideone ) e é equivalente ao seguinte:
Cada um
^F
pode ser substituído por um caractere literal 6 (ACK) e\177
substituído pelo caractere 127 (DEL).O shebang é contado como 1, a segunda nova linha é desnecessária. A entrada é retirada do stdin.
Uso da amostra
Explicação
A saída é gerada um byte de cada vez. Cada caractere é transliterado, e isso é interpretado como uma matriz de bits usando
vec
. Os bits são armazenados da seguinte maneira:A saída alterna entre 3 e 5 barras, para que os bits se
56
espalhem no01
próximo dígito. Bit7
não é usado.fonte
C #,
360 355331 bytesOlá, primeira tentativa de código-golfe. Espero que isso não seja tão ruim para uma entrada em C #.
Uso:
p("159114");
retornaráExpandido:
fonte
string s(string n)
paran=>
usando um lambda. Ah, bem, você pode deixar assim, se preferir. :) No entanto, criei uma porta para Java que credita a você. ;)pitão 2,
317298278273,15Eu considerei 4 espaços como guias enquanto contava.
Não compactado e legível:
fonte
l[y+dy][x+dx]=c if r[map(int,s)[x/2]][i]=='1' else ' '
paral[y+dy][x+dx]=[' ',c][r[map(int,s)[x/2]][i]=='1']
salva 5 bytes, alterarreturn '\n'.join(''.join(x) for x in l)
paraprint'\n'.join(''.join(x)for x in l)
salvar 3 bytes, além de mais algumas alterações. Aqui está um link para um Gist, onde eu tenho o byte contagem regressiva para o 440 da 508.KDB (Q),
172136 bytesExplicação
1) Crie um
d
mapa com todas as formas dos dígitos.2) Preencher a matriz com zeros extras e adicioná-los. ie "01"
3) Use o índice para mapear
" /\"
e imprimir-1
.Teste
Tenho certeza que isso pode ser mais curto !!
Obrigado @hjk
fonte
1 2 0 2 1 2 0 2 1
por(9#1 2 0 2)
(-6).enlist
por1#
obras, então isso é outro -5.enlist
porém porquecount[a 0]#0
não é um átomo :(Pip, 122 + 1 = 123 bytes
Usa a
-n
bandeira. Recebe entrada via argumento da linha de comando.Os caracteres na string UTF-8 têm os seguintes pontos de código:
11152, 19190, 12535, 12547, 17651, 11575, 11557, 12629, 11071, 11089
.Ligeiramente não destruído:
A estratégia básica é encontrar os caracteres constituintes de cada número e enviesá-los adequadamente. Por exemplo, para
8
, queremos isso (espaços representados por pontos):que se transformará nisso:
O bom recurso dessa estratégia é que vários números pré-inclinados podem ser simplesmente concatenados lado a lado.
Agora, podemos codificar
/.\\/.\\/.
na base 3 como1200120012
. Em seguida, podemos converter isso em decimal e tratá-lo como um ponto de código UTF-8.A expressão
J"\/ "@^(A_TB3M"⮐䫶ヷ䓳ⴷⴥㅕ⬿⭑")@_.2<>2Ma
obtém os dados pré-inclinados pelo seguinte processo:Depois de concatenar essas seqüências lado a lado
$.
, criamos uma grade de espaços (2 * n +2 quadrado), percorremos a grade pré-inclinada e substituímos os espaços correspondentes na grade pós-inclinada pela opção caracteres apropriados. Para que isso aconteça, é possível modificar o código para imprimir cada estágio e fazer uma pausa para entrada do usuário:A grade é realmente construída de cabeça para baixo, porque isso parecia facilitar a matemática.
Tenho certeza de que existem algoritmos melhores para usar. Mas eu queria ter minha própria ideia, em vez de copiar a de outra pessoa.
Mais sobre Pip
fonte
Brainfuck - 719 bytes
Apenas para contexto histórico, créditos para Daniel B Cristofani. Não sei exatamente quando isso foi criado, mas está disponível no Internet Archive em 9 de maio de 2003.
A saída para
9
é diferente da descrição do problema.fonte
Perl, 270 bytes
Eu realmente não deveria ter perdido meu tempo com isso.
fonte
[$1]while/(.)/g
por[$_]for/./g
para salvar 4 bytes. substituafor($i=0;$i<=$l;$i++)
porfor$i(0..$l)
para salvar 9 bytes.JavaScript ( ES6 ), 191
206Execute o snippet no Firefox para testar.
fonte
Java 8, 341 bytes
Porta da resposta C # .NET do @Shion , por isso não deixe de vota-lo também!
Experimente online.
Explicação:
fonte