Dado qualquer número inteiro de 16 bits não assinado, converta seu número decimal (ou seja, base-10) em uma grade 4x4 ASCII de seus bits, com o bit mais significativo (MSB) na parte superior esquerda, o bit menos significativo (LSB) em canto inferior direito, leia e depois para baixo (como texto em inglês).
Exemplos
Entrada: 4242
+---+---+---+---+
| | | | # |
+---+---+---+---+
| | | | |
+---+---+---+---+
| # | | | # |
+---+---+---+---+
| | | # | |
+---+---+---+---+
Entrada: 33825
+---+---+---+---+
| # | | | |
+---+---+---+---+
| | # | | |
+---+---+---+---+
| | | # | |
+---+---+---+---+
| | | | # |
+---+---+---+---+
Requisitos Específicos
A entrada deve estar em decimal (base 10), no entanto, você pode converter para binário da maneira que desejar (incluindo o uso de built-ins de idioma, se disponível).
O formato da tabela de saída deve corresponder exatamente . Isto significa que você deve usar os caracteres específicos ASCII (
-
,+
e|
) para as linhas de grade da tabela, como mostrado, interior de cada célula é de 3 caracteres e verdadeiros pedaços são representados por#
enquanto falsa é representado por um espaço ().
Espaços em branco à esquerda ou à direita não são permitidos. Nova linha final é necessária .
A ordem dos bits deve corresponder aos exemplos, conforme descrito.
Subsídios
- A entrada deve ser um número de base 10 na linha de comando, entrada padrão ou entrada do usuário, mas não deve ser codificada em seu código-fonte.
Que ganhe o código mais curto e claro ! :-)
fonte
Respostas:
J, 26 bytes
Um verbo anônimo. Felizmente, J é muito bom em desenhar caixas. Vamos tentar:
Como alguns comentaristas mencionaram, a maneira como J desenha caixas depende do sistema: em algumas plataformas, esse código funcionará nas configurações padrão, mas em outros, as caixas serão desenhadas usando caracteres de desenho de linha Unicode. (Os comandos
9!:6
e9!:7
permitem que você consulta e defina os personagens desenhar valores em caixa, com, respectivamente).fonte
JavaScript (ES6), 102
... ou 96 usando em
return
vez deconsole.log
.Teste a execução do snippet abaixo em um navegador compatível com EcmaScript 6.
fonte
Befunge -93, 196
218bytesPara executar o programa ...
Show
.Input
caixa.Run
. (Ou mudeSlow
para algo como 5 milissegundos e clique emShow
.)Saída para 4242:
Saída para 33825:
Explicação
Oh Deus, no que eu me meti? Bem, aqui vai! (Código irrelevante é substituído por
.
s.)Parte 1: Obter entrada (armazenar em 0,0) e calcular 32768 (armazenar em 1,0).
Parte 2: Imprima "+ --- + --- + --- + ---".
Parte 3: Imprima "+" e uma nova linha e verifique se (1,0) é 0 (ou seja, terminamos). Nesse caso, termine. Caso contrário, continue.
Parte 4: Obtenha dígitos binários da entrada, atualizando (0,0) e (1,0) à medida que avançamos. Imprima as coisas certas. Aproveito o comportamento envolvente de Befunge.
Parte 5: imprima uma nova linha e volte à parte que imprime "+ --- + --- + --- + --- +". O truque de enrolar é usado.
Ta-da!
fonte
Julia,
156143 bytesUngolfed:
Experimente online
fonte
Python 2,
157153151 151146 bytesAgradecemos a Morgan Thrapp por salvar 4 bytes e a Jonathan Frech por salvar 5.
Uso
fonte
'+---'*4
em uma variável e mais dois, se você fizerj=''.join
int(input())
cominput()
e salvar cinco bytes.Ruby,
118114obrigado por @ w0lf por salvar alguns caracteres.
fonte
?
notação (ex: em?|
vez de'|'
). Isso funciona para tudo, exceto o espaço.?\s
funciona para o espaço, mas não é realmente útil aqui.GNU sed + dc, 116
A pontuação inclui +1 para
-r
sinalizadores parased
:Saída de teste:
Alternativamente:
Sed puro, 146
Você pode pensar que é trapaça usar
sed
a extensão GNU para avaliar umdc
comando. Nesse caso, podemos fazer isso de maneira um pouco diferente, de acordo com esta meta-resposta . É claro que a pergunta afirma claramente que a entrada deve estar na base 10, mas aqui estou tentando afirmar que podemos substituir isso porsed
respostas e usar unário (base 1).Saída de teste
Usando
printf
para gerar a sequência unária necessária:fonte
C ++ 11,
193191190176172 bytesMinha primeira solução em codegolf já, então não me culpe.
Ungolfed
Versão anterior
fonte
using namespace std
no código de produção. E não é útil aqui também.0x
.using namespace std
economiza alguns bytes, porque não preciso prefixarcout
ecin
comstd::
. Mesmo usando apenasusing std::cout;
não vai ajudar.C++
não suporta int automático.Pitão, 37 bytes
Experimente on-line: Demonstration or Test Suite
Explicação:
fonte
CJam,
4341 bytesDefinitivamente jogável, mas acho que é um começo. Gera a linha superior e, a cada 4 bits, cria uma linha par e copia a linha ímpar anterior.
Experimente online .
fonte
Python 2,
122121120 bytes-1 byte graças ao puro
4**8+
truque de @ xnor . A impressão principal é feita repetindo 9 vezes, selecionando a linha apropriada para ímpar / par.fonte
bin(4**8+input())[3:]
economiza mais de um byteformat
Python 2, 94
A ideia é seguir o padrão
exceto
%s
no lugar de espaços em branco e faça a substituição da tupla. A tupla pareceEle é criado retirando os dígitos da entrada em binário e adicionando o símbolo correspondente à frente da tupla. Uma expressão com tupla explícita deu o mesmo comprimento.
Obrigado ao Sp3000 por 2 bytes.
fonte
PowerShell,
203188182 bytesEditar - salvou 15 bytes alterando a ordem que
|
é desenhada, para que possamos despejar.TrimEnd("|")
a saída e converter o loop for em um bloco de subcódigo que produz uma matrizEdit2 - salvou outros 6 bytes, eliminando a necessidade de salvar na
$o
variável e apenas enviando-join''
diretamente.Ooooooooof.
Desenhar no PowerShell é difícil . Trabalhar com dígitos binários no PowerShell é difícil .
Usa built-ins para
[convert]
o número inteiro de entrada em uma representação de string em binário e, em seguida, converte novamente em um[int64]
para que possamos chamar novamente.ToString()
, a fim de acrescentar / preencher o número apropriado de zeros. (Observe que a criação de uma matriz de cadeias e a união delas@(,"0"*16)-join''
é 1 caractere menor que a cadeia literal"0000000000000000"
)Em seguida, faça um loop for simples
1..16|%{...}
verificando cada dígito para criar nossa matriz de saída e, finalmente,-join''
juntos novamente.Anterior, 188
Anterior-er, 203
fonte
Javascript (ES6),
216207 bytesDefine uma função anônima.
Obrigado a ETHproductions por dicas!
fonte
.join` | `
2. Você também pode usar strings de modelo para interpolar valores:i=>`,${"0".repeat....join`,`},`.replace...
3 Você pode encontrar mais dicas do ES6 neste tópico .i=>`,${("0".repeat(16)+i.toString(2)).slice(-16).split``.map((v,l,a)=>l%4?"":"| "+a.slice(l,l+4).map(v=>' #'[v]).join` | `+" |").filter(v=>v).join`,`},`.replace(/,/g,`<line break>+---+---+---+---+<line break>`).slice(1)
("0".repeat(16)+i.toString(2)).slice(-16)
->(65536|i).toString(2).slice(1)
CJam, 62 bytes
Experimente online .
fonte
Pitão, 50 bytes
Explicação terá que esperar até outra hora, eu estou postando isso no meu telefone!
fonte
Ruby, 102
Algoritmo
Imprimir um divisor horizontal
Loop 20 vezes (19..0)
Se o número do loop não for dividido por 5, converta para um número no intervalo 16..0 multiplicando por 4/5. Imprima um espaço (ascii 32) ou
#
(ascii 32 + 3 = 35) precedido|
e seguido por um espaço.Se o número do loop for dividido por 5, imprima | |, nova linha e um divisor horizontal idêntico ao primeiro.
fonte
Perl, 103 bytes
Muita repetição corda para fazer uma grade de
x
s, converter a entrada para binários e, em seguida,s///
osx
s de#
ou$"
(), dependendo da bandeira na posição especificada (
$x
).fonte
PHP, 159 bytes
bingrid16.php
:Uso:
Nada extravagante, apenas forçado com força a renderização.
Tentei outro ângulo usando matrizes em vez de loops, mas era mais longo em 224 bytes:
fonte
Perl 5 ,
8584 bytes8483 bytes de código +-p
sinalizador-1 byte depois que Dom me lembrou de usar uma nova linha
Experimente online!
fonte
$/
!c99 263 bytes
golfed:
ungolfed:
Eu apenas gostei de apresentar uma variante um pouco instável e senti que esta é a primeira vez que é apropriada (até me custando alguns bytes, mas C não pode desafiar esses bytes, mesmo com uma chance, então eu não me importo) de usar o argc / argv
fonte
Ruby, 95
Acene para Mhmd para uma conversão de String concisa, mas eu queria tentar usar métodos de string em vez de métodos numéricos.
fonte
Ruby, 93
Uma versão um pouco mais curta usando apenas operações numéricas.
fonte
C # 227 bytes
Golfe:
Indenção:
Na primeira vez que estou tentando algo assim, dicas serão bem-vindas!
fonte
wc
comandoPython 3,
145144 bytesNa linha:
Com novas linhas:
Edit: Tanks @manatwork para economizar 1 byte
fonte
r=0,1,2,3
é um carácter mais curto do que gerando-o comr=range(4)
.Kotlin , 192 bytes
Embelezado
Teste
fonte
05AB1E , 45 bytes
Experimente online!
fonte