Dada uma matriz de números inteiros positivos na base 10, onde n > 0
, emitem sua representação de uma parede binária.
Como é que isso funciona?
- Converta cada número em sua representação binária.
- Coloque a representação com zeros à esquerda no comprimento do maior, ou seja,
1, 2
->1, 10
->01, 10
. - Crie uma parede onde os
1
s são tijolos0
es faltam tijolos.
Uma parede é um bloco de caracteres em que qualquer caractere imprimível representa um tijolo e um espaço ( 32
) representa um tijolo ausente. Você pode escolher qualquer caractere para o tijolo; ele não precisa ser distinto do outro lado da parede, desde que não seja um caractere de espaço em branco. O caractere de tijolo ausente deve ser um espaço. Para o exemplo abaixo, eu usei *
os tijolos.
Exemplo
Entrada:
[ 15, 7, 13, 11 ]
[ 1111, 111, 1101, 1011 ]
[ 1111, 0111, 1101, 1011 ]
Saída:
**** *** ** * * **
Regras
- As entradas devem ser obtidas na base 10, se o seu idioma aceitar outras bases, você não poderá usá-las.
- Novas linhas à frente e à direita são permitidas.
- A entrada pode ser considerada como uma lista de números inteiros, argumentos separados ou qualquer formato razoável.
- A saída pode estar em qualquer formato razoável: nova string separada por linha, conjunto de linhas, conjunto 2d etc.
- As brechas padrão não são permitidas.
Casos de teste
Observe que, no primeiro caso de teste, todas as camadas têm um tijolo vazio no final.
[ 14, 4, 6, 2 ]
***
*
**
*
[ 1, 2, 4, 8, 16 ]
*
*
*
*
*
[ 15, 11, 15, 15 ]
****
* **
****
****
[ 11, 10, 9, 8 ]
* **
* *
* *
*
Este é o código de golfe, então o código mais curto vence!
[[1, " ", 1, " "], ...]
Respostas:
MATL , 5 bytes
Experimente online!
Explicação
fonte
42*
ou algo assim ...100
ou algum outro número?J , 8 bytes
Experimente online!
Explicação
fonte
#:
é por isso que isso bate Jelly.Geléia , 9 bytes
Experimente online!
EDIT: COMO J BEAT JELLY É IMPOSSÍVEL> _ <
fonte
Oitava, 22 bytes
Experimente online
Explicação:
Economizei alguns bytes graças a Luis Mendo! Além disso, eu não percebi que poderia escolher com qual personagem construir o muro, não apenas
*
.Ou com
de2bi
:Explicação:
O seguinte funciona no TIO, para mais 7 bytes:
Experimente aqui
fonte
Python 3 ,
88 84 71 7472 bytesUm lambda que retorna uma lista de Strings, representando cada linha.
Experimente online! (link para a versão separada da nova linha)
Explicação
lambda n:
- Cria um lambda (anônimo), com um parâmetron
. Retorna implicitamente.[...]
- Cria uma compreensão da lista.bin(x)[2:]
- Obtém as representações binárias dos números..replace(*'0 ')
- Substitui todas as ocorrências de0
por um espaço..rjust(len(bin(max(n)))-2)
- Ajusta as representações binárias ao comprimento da mais longa.for x in n
- iteran
, com a variávelx
.Changelog
-
1- 3 bytes graças a @Rod,-(...)+2
=2-(...)
, uso derjust()
Embin()
vez disso, foi adicionada uma versão inválida, pois não funcionava para1
e2
.Corrigido o erro acima usandoformat()
.Tipo de retorno alterado para a lista de Strings, porque foi permitido pelo OP.
Corrigido outro erro usando
rjust()
e retornando parabin()
, detectado e corrigido pelo @Rod.fonte
JavaScript (ES6),
8179 bytesEconomizou 2 bytes usando números em vez de caracteres para os tijolos, conforme sugerido por Rick Hitchcock
Retorna uma matriz 2D com 1 para os tijolos.
Casos de teste
Mostrar snippet de código
fonte
Haskell ,
767574 bytesExperimente online!
fonte
05AB1E , 9 bytes
Experimente online!
fonte
b0ð:í.Bí»
por 9 bytes também.Ruby,
6359 bytes-4 bytes com a ajuda de Alexis Andersen
Experimente online!
fonte
n.max.to_s(2).size
com('%b'%n.max).size
e você realmente não precisa para substituir o1
com*
R , 87
88bytesBlocos de parede representados por um
8
, porque, bem, muitos oitos.Experimente online!
A lista de números inteiros de entrada é convertida em uma matriz de bits que é cortada de 0 bits à direita e revertida.
A matriz reduzida é então emitida usando
write
uma largura de coluna que foi determinada quando a matriz foi cortada.ifelse()
é a única opção SE que funciona em vetores, infelizmente.fonte
1
em vez""
do arquivo de saídawrite
.Python 2 , 77 bytes
Experimente online!
fonte
APL (Dyalog) ,
30222014 bytesGuardado 6 bytes graças a @ Adám
Experimente online!
(assume
⎕IO←0
como padrão em muitas máquinas)Isso recebe a entrada como uma matriz e retorna uma matriz com
*
s es.
Explicação
fonte
' *'[⍉2⊥⍣¯1⊢⎕]
¨
.T-SQL, 290 bytes
Usa
1
para a peça de tijolo, assume que a entrada vem da tabela@
Ungolfed, com alguma explicação
fonte
Mathematica, 40 bytes
Tijolos são 1s
Mathematica, 48 bytes
Tijolos são #
fonte
//.
. (/.
Significa "substituir uma vez",//.
significa "continuar fazendo a substituição até que a coisa pára de mudar".)C # (.NET Core) ,
112 + 18 = 13086 + 41 = 127 bytesExperimente online!
A contagem de bytes inclui 41 bytes de
using System.Linq;using C=System.Convert;
. Usa1
como personagem para a parede. No entanto, isso é muito longo, mesmo para C # ...fonte
namespace System.Linq{}
para salvar alguns bytes. Aa.Max()
garantia é verdadeira (tenho certeza de que não sou a mais inteligente com binário: P)? Iriaclass Convert{}
salvar qualquer bytes?using System.Linq;using C=System.Convert;
à contagem de bytes, pois essas duasusing
diretivas são necessárias para a compilação do código.Retina , 63 bytes
Experimente online! Explicação:
Converta em unário e sufixo a
<
.Converta em binário.
Quando todos os
<
s tiverem chegado à esquerda, exclua todos.Insira um espaço antes de qualquer
<
s que já tenha atingido a esquerda.Mova todos os
<
passos para a esquerda. Enxague e repita.fonte
PowerShell , 100 bytes
Experimente online!
Ugh, o
convert
binário no PowerShell é tão doloroso. Além disso,.length
y chama-replace
os0
espaços com, além de uma.padLeft()
chamada longa para torná-los iguais..length
, tudo isso resulta em um envio longo.Sugestões de golfe para ficar abaixo de 100 são bem-vindas.
fonte
PHP, 84 bytes
Felizmente, a operação de bit lança o
log
resultado para int. o float não funcionaria aqui.Experimente online .
fonte
Clojure, 185 bytes
Versão não destruída:
Função anônima que aceita o argumento como uma lista. Retorna as linhas como lista.
Lendo as outras respostas, aposto que poderia ser menor.
clojure.string/replace
leva uma quantidade obscena de caracteres para escrever ..fonte
Japonês ,
3330 bytesExperimente online!
Guardado 3 bytes graças a @Justin Mariner
Explicação
fonte
-R
sinalizador (não adicionado à contagem de bytes) para ver a saída associada à nova linha: aqui .Python 3 ,
9290 bytesExperimente online!
Retorna uma lista de linhas. Empilhá-los mostra que eles realmente se alinham corretamente.
O colapso
Converte essencialmente a matriz em binário e substitui todos os 0 por espaços.
N
número de espaços são adicionados à frente de cada linha em queN = [length of longest line] - [length of line]
.-1 bytes
Graças ao Sr. XoderExperimente online!
fonte
'0',' '
por*'0 '
.Japonês , 11 bytes
Experimente online!
Explicação
fonte
z3 z
. Não sei pory y
que não funciona lá, analisarei mais tarde ...Java 7,
13010888 bytesSalve 22 graças a @TheLethalCoder Salve 20 graças a @Xanderhall
Ungolfed:
fonte
i
emb[i]
para salvar um byte. Você pode manter a saída com1
, para que não seja necessário.replace('1','*')
. Use o Java 8 e compile em um lambda para salvar bytes. Se você não quiser fazer isso,int[]b
economiza um byte.i++
avalia ei
depois o incrementa (enquanto++i
faz o oposto) para que você possa mover oi++
fora dofor
loop e usá-lob[i++]
. Ah, e enquanto estamos nisso, você só tem uma linha dentro do seu loop para que os aparelhos não sejam necessários.for(int x:i)
Além disso, você pode usar emLong.toBinaryString
vez da versão Inteira para salvar 3 bytes.Python 2, 217 bytes
Após 2 horas de codificação, decidi que esse numpy é uma má ideia para isso
Uso no Ubuntu
Instalar numpy
Crie um arquivo nomeado
i
com entrada no formato14 4 6 2
Corre
fonte
8o ,
232254250 bytesCódigo
Versão ungolfed com comentários
Essas palavras devem ser invocadas em sequência (veja o exemplo)
Uso e exemplos
Ou mais claramente
fonte
Pitão, 16 bytes
Experimente aqui. Mente o espaço à direita.
fonte
Excel VBA,
170161 bytesGolfe
Função de janela imediata VBE anônima que leva a entrada de formato
1 2 3 .. n
do intervalo[A1]
e gera a parede binária correspondente para a janela Imediata do VBE através do intervalo[B1,C1,2:2]
Formatado:
Ungolfed
Sub
Rotina completa que recebe a entrada do formatoArray(1, 2, 3...)
e envia a parede binária correspondente à janela do VBE Immediate via range[A1,B1,2:2]
fonte
Carvão , 20 bytes
Experimente online! Link é a versão detalhada do código. Funciona convertendo manualmente cada número de entrada em binário, mas imprimindo-o na ordem da direita para a esquerda. Pego a entrada como uma string terminada em nova linha, pois o Charcoal não tem uma boa maneira de inserir listas, caso contrário, escreveria algo assim, que atualmente ocupa atualmente 21 bytes:
Experimente online!Link é a versão detalhada do código. Esta versão vetoriza sobre a matriz de entrada, embora sua saída seja codificada para
-
s, o que salva um byte.fonte