Para um número inteiro n
satisfatório n > 0
, escreva seu valor como um caminho descendente à direita com base em sua representação binária.
Regras
- O primeiro bit de conjunto (mais significativo) está sempre no canto superior esquerdo.
- Quando o próximo bit estiver definido (a
1
), desenhe um caractere ("preenchido") na próxima linha da mesma coluna que o caractere anterior desenhado. Tente usar espaços ("vazios") para preencher, mas qualquer caractere funcionará desde que seja sempre o mesmo. - Quando o próximo bit estiver desmarcado (a
0
), desenhe um caractere ("preenchido") na mesma linha imediatamente à direita do caractere anterior desenhado. - Seu código deve suportar números com pelo menos 20 bits significativos.
- Escreva um programa completo, uma função, um lambda, etc., mas nenhum trecho.
- Não são permitidos espaços à esquerda (ou caracteres "vazios") / linhas
- Qualquer número de espaços à direita (ou caracteres "vazios") / linhas permitidos
- Qualquer tipo de entrada 1D é aceita: número, string, conjunto de booleanos, etc. Entretanto, mantenha a ordem dos bits intocados.
- Qualquer tipo de saída 2D visual é aceita: no stdout, uma string (com dois valores distintos representando "preenchido" e "vazio"), você pode até gerar uma matriz, se desejar. Parece difícil conciliar uma lista de números com a regra "sem espaços de cabeçalho", mas estou aberto a ela se você encontrar uma maneira de usá-la. Nota: se você optar por imprimir ou retornar uma sequência, os caracteres usados deverão ser caracteres ASCII no intervalo de pontos de código [32-126].
- As brechas padrão são proibidas.
- Este é um codegolf, então o código mais curto vence.
Exemplos
Entrada: 1
*
Entrada: 2
**
Entrada: 3
*
*
Entrada: 4
***
Entrada: 5
**
*
Entrada: 6
*
**
Entrada: 7
*
*
*
Entrada: 25
*
***
*
Entrada: 699050
**
**
**
**
**
**
**
**
**
**
Entrada: 1047552
*
*
*
*
*
*
*
*
*
***********
Entrada: 525311
**********
*
*
*
*
*
*
*
*
*
*
[1,0,1]
sim.9
é que1001
eu gostaria que minha entrada fosse0011
. Tudo bem?1
primeiro é parte do desafio, e (re) movê-lo seria banalizar o desafio, por isso tenho medo de dizer que não, @TonHospel. Você pode removê-lo da sua entrada no programa.Respostas:
Gelatina , 8 bytes
Um link monádico que aceita um número como uma lista de zeros e zeros (por exemplo,
13
é[1,1,0,1]
) retornando uma lista de listas de zeros e zeros em que a primeira lista é a primeira linha.Experimente online! ou veja uma suíte de testes formatada
Quão?
fonte
MATL , 14 bytes
Produz saída gráfica como um caminho que começa nas coordenadas (0,0). Experimente no MATL Online! Ou veja alguns exemplos offline abaixo:
Entrada
7
:Saída:
Entrada
699050
:Saída:
Se preferir, você pode ver o caminho como coordenadas complexas para 9 bytes :
Experimente online!
Explicação
fonte
MATL , 10 bytes
Insere uma matriz de dígitos binários. Produz uma matriz.
Experimente online!
Explicação
fonte
Python 2 ,
1009981787366 bytesExperimente online!
Versão recursiva:
Python 2 ,
716967 bytesExperimente online!
fonte
Carvão ,
2220191110 bytesApenas minha segunda resposta de carvão vegetal até agora.
Toma a entrada como String binária (ou seja,
699050
como10101010101010101010
).-9 bytes graças a @ Neil sugerindo um loop para trás.
Experimente online.
Explicação:
Leia STDIN como string na ordem inversa:
Faça um loop sobre seus dígitos binários como strings
ι
:Se
ι
convertido para um número for 1, imprima*
para cima, ou imprima*
para a esquerda.fonte
{}
s.Base
custa apenas 1 byte como você não precisa oCast
em tudo:F⮌↨N²¿ι↑*←*
.-v
, já que o Charcoal foi projetado como uma linguagem de golfe e eu adicionei o modo detalhado apenas para facilitar a digitação e compreensão. (Eu posso adicionar um, se você quiser).-a
é uma abreviação de--ast
, eu o adicionei (formato retirado do PyTek btw) para me ajudar a entender o código sucinto com o mínimo de esforço possível: P (e realmente ajuda quando você acidentalmente estraga a ordem dos argumentos). Além disso, não-l
é uma opção separada . (também faça isso-h
para obter ajuda com / descrições de argumentos da linha de comando)C # (.NET Core) ,
155123120113101 bytesSalva 32 bytes devido à possibilidade de entrada ser recebida como uma matriz de bits.
Guardado 7 bytes graças a @auhmaan.
Guardou 10 bytes graças a @KevinCruijssen.
Experimente online!
fonte
+new string(' ',c)+"*"
para+"*".PadLeft(c)
(salva 7 bytes)?0
em vez de*
:if(n[i++]<1){m+="*";c++;}
aif(n[i++]<1)m+=c++%1;
e"*".PadLeft(c);
para"0".PadLeft(c);
m+=
agora pode ser um ternário-se:m+=n[i++]<1?c++%1+"":(i>1?"\n":"")+"0".PadLeft(c);
0
's' e o uso do operador ternário são realmente inteligentes! Eu também resolvi o caso699060
, simplesmente definindoc
para um no começo, meio que perdi isso ao verificar os casos de teste.05AB1E ,
181714 bytesExperimente online!
Explicação
Explicação da tela 05AB1E
fonte
γ€gć¸s>«1IÔ·ÌΛ
deve salvar 4 bytes.Python 2 , 59 bytes
Experimente online!
Baseado na solução da TFeld .
fonte
Haskell , 65 bytes
Experimente online!
Recebe entrada como uma lista de booleanos.
Caril PAKCS, 70 bytes
A porta do Haskell responde, mas como
<-
não funciona no Curry, precisamos fazer uma função auxiliaru
. Também precisamos adicionar um espaço entref
e.
para que Curry o analise como uma composição em vez de um ponto.Isso também funciona no MCC Curry, mas não no Sloth Curry (que é o único suportado pelo TIO).
fonte
Haskell ,
74706762 bytesExperimente online! Pega uma lista de zeros e uns como entrada e retorna uma sequência separada por nova linha.
Inspirado pela resposta do xnor .
fonte
Emojicode , 251 bytes
Experimente online!
Definitivamente, essa não é uma solução para o golfe, mas não existe uma pessoa viva que considere o código Emoji como um idioma para o golfe. No entanto, no processo de me sujeitar aos horrores que são a sintaxe do código emoji em um esforço para me ensinar essa monstruosidade de uma língua, fiquei agradavelmente surpreendido com o quão poderoso e eficiente pode ser.
Explicação:
fonte
JavaScript (ES6), 48 bytes
O mesmo formato de E / S e a mesma lógica da versão recursiva abaixo.
Experimente online!
Ou 42 bytes, se este formato for aceitável.
Versão recursiva, 56 bytes
Recebe a entrada como uma matriz de números inteiros (0 ou 1). Usa
0
para preenchido e espaço para vazio.Experimente online!
Comentado
fonte
Utilitários Bash + GNU, 38
Aqui
^K
e^H
são literais caracteres de tabulação vertical e controle de retrocesso. Como eles não são renderizados corretamente nos navegadores, portanto, esse script pode ser recriado da seguinte maneira:Corra em um terminal. A entrada é via STDIN.
Essa resposta pode exagerar nas especificações - na verdade, não há caracteres iniciais em cada linha de saída - todo o posicionamento é feito com caracteres de controle. Se isso for muito exagerado, a saída poderá ser canalizada para
|col -x|tac
11 bytes adicionais.fonte
Lote, 113 bytes
Leva uma lista de bits como argumentos de linha de comando. Usa em
+
vez de*
porque*
tem um significado especial nas%s:...=...%
expansões.fonte
Java 10,
100106 bytesPega uma matriz de booleanos e retorna uma String (
0
s estão vazios,1
s são preenchidos). Experimente online aqui .Agradecimentos a Olivier Grégoire por me ajudar um pouco mais no golfe e por me alertar para o fato de que meu formato de saída não estava dentro das especificações.
Versão não destruída:
fonte
{if(c){s+="\n";for(j=i;j-->0;)s+=0;}else++i;s+=1;}
{if(c)for(s+="\n",j=i;j-->0;)s+=0;else++i;s+=1;}
Java (JDK 10) , 83 bytes
Experimente online!
int[]
int[][]
fonte
Haskell , 126 bytes
Insira como uma lista de zeros e uns. Transforma o número em deslocamento
x↦[1-x,x]
e calcula as somas parciais. A saída final é feita com duas compreensões de lista aninhadas.Experimente online!
fonte
R , 59 bytes
Experimente online!
Recebe a entrada como uma matriz de bits.
Retorna uma matriz booleana de
TRUE
eFALSE
representando ae*
a, respectivamente.
Também possui algumas coisas no rodapé para imprimir uma matriz correspondente às especificações acima, para facilitar o teste.
fonte
APL + WIN, 65 ou 46 bytes
Solicita a entrada do número inteiro
ou para vetor numérico da representação binária do número inteiro
assumindo que li os comentários para certas respostas corretamente e a última entrada é permitida.
fonte
Pitão, 23 bytes
Experimente aqui
Explicação
fonte
Perl 5
-p
,5436 bytesExperimente online!
Corte-o depois que percebi que a entrada poderia ser um pouco complicada.
fonte
SmileBASIC,
645957 bytesO bit mais alto (bit de sinal) é verificado e, se for 1, a posição X aumenta. Se o bit de sinal é menor que a posição X (ou seja, o bit de sinal é 0 e X não é 0), a posição Y aumenta.
O primeiro movimento sempre será horizontal, portanto o movimento Y é bloqueado até depois do primeiro movimento X. Isso garante que a posição Y não aumente durante os 0 bits iniciais.
Então N é deslocado para a esquerda e isso se repete até N atingir 0.
fonte
Ruby , 63 bytes
Experimente online!
fonte
Japonês ,
1917 bytesRecebe a entrada como uma matriz de bits, por exemplo
[1,0,1]
, em"
vez de*
.Raspou dois bytes graças a Oliver .
Experimente online!
fonte
SpT
porTî
-î
é semelhante ap
, exceto pelo padrão" "
. Além disso, há um atalho paraq
:¬
î
, certamente muito útil. Costumo verificar se há chances de usar os atalhos, mas ainda sinto falta de alguns deles, muito obrigado por sua ajuda.Python 2, 113 bytes
Não tenho certeza se este conta (ele gera uma matriz de cada uma das linhas), mas se sim, então alterarei minha contagem de bytes para 103:
fonte
TI-Basic (TI-84 Plus CE), 85 bytes
Solicita uma lista booleana, retorna uma matriz de 0 e 1.
Percorre a lista, incrementando X se o próximo 'bit' for 0, alterando Y caso contrário, adicionando um 1 à matriz nesse local e retornando a matriz no final.
O TI-Basic é uma linguagem tokenizada .
Prompt
,L
* 6, (nova linha) * 12,1
* 5,→
* 7,X
* 5,Y
* 5,sum(
,L
* 5,{
,Ans
* 2,,
* 5,-
,+
* 3,dim(
* 3,(
* 4,For(
,I
* 3,2
,not(
,End
= 73 bytesDelvar
,[A]
* 5 = 12 bytesTI-Basic (TI-84 Plus CE), 56 bytes
Os mesmos processos acima, mas usando a saída gráfica (limitada pelo tamanho da tela: 10 linhas, 26 colunas, no máximo 10 1s e 25 0s) como segue, em vez de adicionar a uma matriz.
fonte
Pitão, 30 bytes
Experimente online!
Usos
Tradução Python 3:"
vez de*
.fonte
x86 .COM, 32 bytes
fonte
APL (Dyalog Classic) , 18 bytes
Experimente online!
fonte