Dado un entero positivo n >= 1, genera las primeras nfilas de la siguiente estructura:
#
# #
###
# #
# # #
## ##
#####
# #
# # #
# # # #
# ### #
## ##
## # ##
### ###
#######
La nenésima fila indexada es la representación binaria de n, reflejada sin copiar el último carácter, #en lugar de 1 y <space>en lugar de 0. Todas las filas están centradas.
Debe mostrar como ASCII-art, pero puede usar cualquier carácter que no sea un espacio en blanco en lugar de donde lo uso #en el ejemplo. Se permite el espacio en blanco al final y se permite una nueva línea al final. El resultado debe parecerse al ejemplo, y no debe haber espacios en blanco iniciales ni líneas nuevas.
Puedes ver las primeras 1023 filas de la catedral fractal aquí .
Para generar casos de prueba más grandes, aquí hay una implementación de referencia no protegida en Python

Respuestas:
MATL , 10 bytes
Pruébalo en línea!
Explicación
fuente
35*cson 4 personajes35fijo? Eso parece un poco específico. Por otro lado, algunos desafíos permiten cualquier char, por lo que puede ser una buena idea. ¿Crees que#es el más común?Zc, con carácter35, es decir#). Gracias, @ ConorO'Brien!05AB1E , 9 bytes
Código:
Utiliza la codificación 05AB1E . Pruébalo en línea!
Explicación:
fuente
Jalea , 12 bytes
Pruébalo en línea!
fuente
Python 2 , 92 bytes
Pruébalo en línea!
En Python 3,
s=f'{x+1:0{len(bin(n))-2}b}'.replace(*'0 ')es más corto, pero losint(input())parens alrededor delprintargumento lo empujan hasta 95 bytes.fuente
2**len(bin(n))/4todos modos)JavaScript (ES6), 106 bytes
Se utiliza
1como carácter que no es un espacio en blanco.Manifestación
Mostrar fragmento de código
Versión alternativa (mismo tamaño)
Sin
Math.clz32():fuente
Math.clz32, ¡ni siquiera sabía que existía!Casco ,
212018 bytes¡Gracias @ Zgarb por jugar 2 bytes!
Pruébalo en línea!
Ungolfed / Explicación
Para evitar rellenos largos, esto determina el ancho del fractal que se da como
2*len(bin(N))-1y genera todas las secuencias de esa longitud con los símbolos#,_('_' denota un espacio).Como el poder cartesiano se genera en orden y los números binarios también, esto está bien. Todo lo que necesitamos hacer para obtener el fractal en este punto es filtrar todos los palíndromos y eso es básicamente:
fuente
Ṙ;puede ser justoRyȯes innecesario. Buena idea de respuesta!Mathematica, 94 bytes
fuente
Mathematica, 98 bytes
¡Pruébalo en el sandbox de Wolfram ! El
⌊y⌋son tres bytes cada uno.Es un enfoque diferente de las otras respuestas hasta ahora, utilizando la naturaleza fractal del patrón. El paso clave es
ArrayFlatten@{{0,#,0},{1,0,1},{1,#,1}}&, que hace las cosas fractales, mejor explicado en forma de imagen:El código repite este paso suficientes veces para obtener al menos n filas, luego recorta las filas adicionales y lo muestra muy bien.
fuente
Gaia , 11 bytes
Pruébalo en línea!
Explicación
fuente
Pitón 2 ,
120118107 bytesgracias @luismendo, @officialaimm, @ halvard-hummel
Pruébalo en línea!
fuente
replace(*'0 ')para 2 bytesC # (.NET Core) ,
192178 bytes168 + 23gracias TheLethalCoder por la ayuda.
Pruébalo en línea!
bastante seguro de que esto puede reducirse mucho, muy probablemente en el relleno y la inversión de la cadena.
fuente
x=>conteo de bytes y tenga en cuenta que no necesita incluir el punto y coma final.Enumerable.Range(1,x).Select(zes más corto comonew int[x].Select((_,z)(creo que es correcto). Como está utilizando Linq, debe incluirlousing System.Linq;en su recuento de bytes. También lo está utilizando,Mathpor lo que debe incluirlousing System;o calificarlo por completo. Tenga en cuenta que esto es más corto comonamespace System.Linq{},' 'en laPadLeftllamada ya que un espacio es el predeterminado.namespace System.Linq{}Carbón , 28 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Crea una lista de los primeros
nnúmeros naturales.Repita hasta que todos los elementos sean cero.
Imprima el último dígito binario de cada elemento de la lista como a
o#.Moverse a la columna anterior.
Divide todos los elementos de la lista por dos.
Una vez que se ha dibujado la mitad izquierda, reflexione.
fuente
MapAssignRight(IntDivide, 2, q);que ahorra 3 bytes.J, 29 bytes
Pruébalo en línea!
explicación
i.enteros hasta n, la entrada(#.^:_1)convertido a base 2(],}.@|.)fila por fila ("1hace esa parte), tome el número binario (]es la identidad fn) y catéelo (,) con su reverso (|.), donde se decapita el reverso (}.).' #'{~convierte el1sy0S para hashes y espacios.fuente
#.invlugar de#.^:_1.n = 1no imprimes nada. De todos modos, puede eliminar algunos bytes con algunos cambios como este' #'{~(,|.@}:)"1@#:@:>:@i.(si uno puede desactivarlo, puede eliminar 4 bytes más). Básicamente, use un gancho porque funciona exactamente como una horquilla cuando el diente izquierdo es]y use el incorporado en el#:que AFAIK es casi igual#.inv. EDITAR: Creo que mi respuesta es lo suficientemente similar como para justificar ser un comentario, avíseme si cree que debería ser una respuesta propia.#:y no funcionó, pero debo estar recordando mal porque tienes razón en eso.2 #:lo que solo obtendrá el dígito más a la derecha.#:Funciones monádicas como#.inv(o#.&:_1). Esto difiere de diádico#:, que solo da tantos dígitos como átomos en su argumento izquierdo.Protón , 95 bytes
Pruébalo en línea!
Hay demasiados errores para no tener demasiados corchetes ... Necesito arreglar el analizador ...
fuente
SOGL V0.12 , 11 bytes
Pruébalo aquí!
fuente
PHP,
98 97 9594 + 1 bytesEjecutar como tubería con
-nRo probarlo en línea . Usos1como no espacios en blanco.fuente
$argn=1y$argn=3no es correcta, y$argnestá basada en 0 (especificada en base 1)K (ngn / k) , 19 bytes
Pruébalo en línea!
fuente
Python 2 , 93 bytes
Pruébalo en línea!
fuente
Python 2 , 89 bytes
Pruébalo en línea!
fuente
C (gcc) ,
146108105 bytesPruébalo en línea!
Esta es una función
f(n)llamada con el número de filasn, usando un signo de exclamación (!) como carácter que no es un espacio en blanco.Explicacion :
fuente
--n&&o+p(n);o;lugar de--n?o,p(n),o:o;y enfor(;c++<n;puts(""))p(b);lugar dewhile(c++<n)p(b),puts("");JavaScript (Node.js) ,
156149 bytes-7 bytes por @ ConorO'Brien
Pruébalo en línea!
Función recursiva. Desafortunadamente, JS no admite la inversión de una cadena, por lo que se utilizan 19 bytes para convertirla en una matriz y viceversa.
fuente
[...b]lugar deb.split(""); también puedes usar en.join``.substr(1)lugar de.join("").substr(1); finalmente, creo que puedes usar ens+1lugar des+"1"Perl 5 , 77 + 1 (-n) = 78 bytes
Pruébalo en línea!
Usando '1' en lugar de '#' porque ahorra un par de bytes.
fuente
Stax , 8 bytes
Ejecutar y depurarlo
La respuesta más corta hasta ahora. Utiliza el código de acceso CP437 1 en lugar de
#.ASCII equivalente:
fuente