Dado un entero positivo n >= 1
, genera las primeras n
filas de la siguiente estructura:
#
# #
###
# #
# # #
## ##
#####
# #
# # #
# # # #
# ### #
## ##
## # ##
### ###
#######
La n
ené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*c
son 4 personajes35
fijo? 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 delprint
argumento lo empujan hasta 95 bytes.fuente
2**len(bin(n))/4
todos modos)JavaScript (ES6), 106 bytes
Se utiliza
1
como 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))-1
y 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 justoR
yȯ
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(z
es 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,Math
por lo que debe incluirlousing System;
o calificarlo por completo. Tenga en cuenta que esto es más corto comonamespace System.Linq{}
,' '
en laPadLeft
llamada 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
n
nú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 ("1
hace esa parte), tome el número binario (]
es la identidad fn) y catéelo (,
) con su reverso (|.
), donde se decapita el reverso (}.
).' #'{~
convierte el1
sy0
S para hashes y espacios.fuente
#.inv
lugar de#.^:_1
.n = 1
no 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
-nR
o probarlo en línea . Usos1
como no espacios en blanco.fuente
$argn=1
y$argn=3
no es correcta, y$argn
está 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+1
lugar 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