Dado um número inteiro positivo n >= 1
, produza as primeiras n
linhas da seguinte estrutura:
#
# #
###
# #
# # #
## ##
#####
# #
# # #
# # # #
# ### #
## ##
## # ##
### ###
#######
A n
-ésima linha indexada 1 é a representação binária de n
, espelhada sem copiar o último caractere, com #
no lugar de 1 e <space>
no lugar de 0. Todas as linhas são centralizadas.
Você deve produzir como arte ASCII, mas pode usar qualquer caractere que não seja um espaço em branco no lugar de onde eu uso #
no exemplo. O espaço em branco à direita é permitido e uma nova linha à direita é permitida. A saída deve se parecer com o exemplo, e não há espaço em branco extra nem novas linhas de destaque.
Você pode ver as primeiras 1023 linhas da catedral fractal aqui .
Para gerar casos de teste maiores, aqui está uma implementação de referência não destruída em Python
Respostas:
MATL , 10 bytes
Experimente online!
Explicação
fonte
35*c
é 4 caracteres35
fixo? Isso parece um pouco específico. Por outro lado, alguns desafios permitem qualquer caractere, por isso pode ser uma boa ideia. Você acha que#
é o mais comum?Zc
, com caractere35
, ie#
). Obrigado, @ ConorO'Brien!05AB1E , 9 bytes
Código:
Usa a codificação 05AB1E . Experimente online!
Explicação:
fonte
Gelatina , 12 bytes
Experimente online!
fonte
Python 2 , 92 bytes
Experimente online!
No Python 3,
s=f'{x+1:0{len(bin(n))-2}b}'.replace(*'0 ')
é mais curto, masint(input())
e parens em torno doprint
argumento aumentam para 95 bytes.fonte
2**len(bin(n))/4
qualquer maneira)JavaScript (ES6), 106 bytes
Usa
1
como o caractere que não é um espaço em branco.Demo
Mostrar snippet de código
Versão alternativa (mesmo tamanho)
Sem
Math.clz32()
:fonte
Math.clz32
- nem sabia que existia!Casca ,
212018 bytesObrigado @Zgarb por jogar fora 2 bytes!
Experimente online!
Ungolfed / Explicação
Para evitar o preenchimento prolongado, isso determina a largura do fractal que é dado como
2*len(bin(N))-1
e gera todas as seqüências desse comprimento com os símbolos#,_
('_' indica um espaço).Como o poder cartesiano é gerado em ordem e os números binários também, isso é bom. Tudo o que precisamos fazer para obter o fractal neste momento é filtrar todos os palíndromos e é basicamente isso:
fonte
Ṙ;
pode ser justoR
eȯ
é desnecessário. Boa ideia de resposta!Mathematica, 94 bytes
fonte
Mathematica, 98 bytes
Experimente na sandbox Wolfram ! Os
⌊
e⌋
são três bytes cada.É uma abordagem diferente das outras respostas até agora, usando a natureza fractal do padrão. O passo principal é
ArrayFlatten@{{0,#,0},{1,0,1},{1,#,1}}&
, que faz as coisas fracamente, melhor explicadas na forma de figura:O código repete essa etapa várias vezes para obter pelo menos n linhas e, em seguida, corta as linhas extras e a exibe de maneira adequada.
fonte
Gaia , 11 bytes
Experimente online!
Explicação
fonte
Python 2 ,
120118107 bytesobrigado @luismendo, @officialaimm, @ halvard-hummel
Experimente online!
fonte
replace(*'0 ')
para 2 bytesC # (.NET Core) ,
192178 bytes168 + 23obrigado TheLethalCoder pela ajuda.
Experimente online!
Certeza de que isso pode ser reduzido bastante, provavelmente no preenchimento e reversão da corda.
fonte
x=>
contagem de bytes e observe que você não precisa incluir o ponto e vírgula à direita.Enumerable.Range(1,x).Select(z
é mais curto quantonew int[x].Select((_,z)
(acho que está correto). Como você está usando o Linq, você deve incluirusing System.Linq;
na sua contagem de bytes. Você também está usando,Math
para incluirusing System;
ou qualificá-lo totalmente. Note-se que este é, em seguida, mais curtonamespace System.Linq{}
,' '
naPadLeft
chamada, pois o espaço é o padrão.namespace System.Linq{}
Carvão , 28 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Crie uma lista dos primeiros
n
números naturais.Repita até que todos os elementos sejam zero.
Imprima o último dígito binário de cada elemento da lista como um
ou
#
.Mover para a coluna anterior.
Divida todos os elementos da lista por dois.
Depois que a metade esquerda tiver sido desenhada, reflita-a.
fonte
MapAssignRight(IntDivide, 2, q);
que economiza 3 bytes.J, 29 bytes
Experimente online!
explicação
i.
inteiros até n, a entrada(#.^:_1)
convertido em base 2(],}.@|.)
linha por linha ("1
faz essa parte), pega o número binário (]
é a identidade fn) e o cat (,
) com seu reverso (|.
), onde o inverso é decapitado (}.
).' #'{~
converte1
s e0
s em hashes e espaços.fonte
#.inv
vez de#.^:_1
.n = 1
você não imprime nada. De qualquer forma, você pode cortar alguns bytes com algumas alterações como essa' #'{~(,|.@}:)"1@#:@:>:@i.
(se você tiver permissão para desativar um, poderá remover mais 4 bytes). Basicamente, use um gancho porque ele funciona exatamente como um garfo quando o dente esquerdo está]
e use o built-in em#:
que o AFAIK é aproximadamente o mesmo que#.inv
. Edição: Eu acho que minha resposta é semelhante o suficiente para justificar ser um comentário, deixe-me saber se você acha que deve ser uma resposta própria.#:
e não funcionou, mas devo estar me lembrando errado, porque você está certo disso.2 #:
que só obterá o dígito mais à direita.#:
Funções monádicas como#.inv
(ou#.&:_1
). Isso difere da diádica#:
, que fornece apenas quantos dígitos há átomos em seu argumento esquerdo.Próton , 95 bytes
Experimente online!
Existem bugs demais para não ter colchetes demais ... Preciso corrigir o analisador ...
fonte
SOGL V0.12 , 11 bytes
Experimente aqui!
fonte
PHP,
98 97 9594 + 1 bytesExecute como pipe
-nR
ou experimente online . Usa1
como espaço não em branco.fonte
$argn=1
e$argn=3
não é correcta, e$argn
é 0-base (especificado foi baseada-1)K (ngn / k) , 19 bytes
Experimente online!
fonte
Python 2 , 93 bytes
Experimente online!
fonte
Python 2 , 89 bytes
Experimente online!
fonte
C (gcc) ,
146108105 bytesExperimente online!
Essa é uma função
f(n)
chamada com o número de linhasn
, usando um ponto de exclamação (!
) como caractere que não é um espaço em branco.Explicação :
fonte
--n&&o+p(n);o;
vez de--n?o,p(n),o:o;
e emfor(;c++<n;puts(""))p(b);
vez dewhile(c++<n)p(b),puts("");
JavaScript (Node.js) ,
156149 bytes-7 bytes por @ ConorO'Brien
Experimente online!
Função recursiva. Infelizmente, o JS não suporta a reversão de uma sequência, portanto, 19 bytes são usados para transformá-la em uma matriz e vice-versa.
fonte
[...b]
vez deb.split("")
; você também pode usar em.join``.substr(1)
vez de.join("").substr(1)
; finalmente, acho que você pode usar ems+1
vez des+"1"
Perl 5 , 77 + 1 (-n) = 78 bytes
Experimente online!
Usando '1' em vez de '#' porque salva alguns bytes.
fonte
Stax , 8 bytes
Execute e depure
Resposta mais curta até agora. Usa o código 1 do CP437 no lugar de
#
.Equivalente ASCII:
fonte