El desafío de hoy es dibujar un árbol binario tan bello como el arte ascii como este ejemplo:
/\
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/\ /\
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/\ /\ /\ /\
/ \ / \ / \ / \
/ \ / \ / \ / \
/ \ / \ / \ / \
/\ /\ /\ /\ /\ /\ /\ /\
/ \ / \ / \ / \ / \ / \ / \ / \
/\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
Se le dará un entero positivo como entrada. Esta entrada es la altura del árbol . El ejemplo anterior tiene una altura de seis.
Puede enviar un programa completo o una función, y puede utilizar cualquiera de nuestros métodos de E / S predeterminados . Por ejemplo, se permitiría imprimir el árbol, devolver una cadena con nuevas líneas, devolver una matriz de caracteres 2D, guardar el árbol en un archivo, etc.
Se permiten espacios finales en cada línea.
Aquí hay algunos ejemplos de entradas y sus salidas correspondientes:
1:
/\
2:
/\
/\/\
3:
/\
/ \
/\ /\
/\/\/\/\
4:
/\
/ \
/ \
/ \
/\ /\
/ \ / \
/\ /\ /\ /\
/\/\/\/\/\/\/\/\
5:
/\
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/\ /\
/ \ / \
/ \ / \
/ \ / \
/\ /\ /\ /\
/ \ / \ / \ / \
/\ /\ /\ /\ /\ /\ /\ /\
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
Desafortunadamente, la salida crece exponencialmente, por lo que es difícil mostrar ejemplos más grandes. Aquí hay un enlace a la salida para 8.
Como de costumbre, este es un desafío de código de golf , por lo que se aplican las lagunas estándar e intenta escribir el programa más corto posible en el idioma que elijas.
¡Feliz golf!
Respuestas:
Python 2, 77 bytes
Imprime con espacios finales, terminando con error.
Tomé este código de mi envío a un desafío que planteé en Anarchy Golf , más una mejora de un byte encontrada por xsot. El valor codificado de 128 fue cambiado a
2**input()
.La idea es que cada fila de la salida sea un segmento copiado una o más veces. La mitad después de la división de entrada tiene una copia de cada segmento, el cuarto después de la siguiente división tiene dos copias, y así sucesivamente, hasta la última línea con muchos segmentos de
/\
.Cada segmento tenía un
/
y\
, con espacios intermedios, así como también en el exterior para rellenar a la longitud correcta. El acolchado exterior está hecho concenter
.La variable
s
rastrea la corriente con cada segmento, y el número de segmentos esS/s
para que el ancho total sea el ancho del árbolS
. El número de líneai
cuenta hacia atrás por 2, y cada vez que el valors
es la mitad, se produce una división y el ancho del segmento se reduce a la mitad. Esto se hace a través de la expresións/=s/i
. Cuandoi
llega0
, esto da un error que termina el programa.Como anagolf solo permite presentaciones de programas, no exploré la posibilidad de una función recursiva, que creo que es más corta.
fuente
V , 32 bytes
Pruébalo en línea!
Hexdump:
fuente
Lienzo , 11 bytes.
Pruébalo aquí!
Explicación:
fuente
Haskell ,
140138135bytesPruébalo en línea! Llamar con
b 5
, devuelve una lista de cadenas.Uso de impresión bonita:
(algunos) Explicación:
e n
genera una cadena den
espaciosn!f
rellena cada cadena en la lista de cadenasf
conn
espacios a izquierda y derechaf n
dibuja un "pico" en unan
de2n
rectángulob n
dibuja el árbol binario concatenando dos árboles más pequeños y centra un nuevo pico sobre ellosEditar: -3 bytes gracias a Zgarb!
fuente
1!f(n-1)
ym!f m
debería guardar un par de bytes.J ,
49 4342 bytesEsto se evalúa como un verbo que toma un número y devuelve una matriz de caracteres 2D. Pruébalo en línea!
Explicación
Primero construyo una matriz de los valores -1, 0 y 1 iterando un verbo auxiliar, y luego reemplazo los números por caracteres. El verbo auxiliar construye la mitad derecha de la siguiente iteración, luego la refleja horizontalmente para producir el resto. En la siguiente explicación,
,
concatena matrices 2D verticalmente y matrices 1D horizontalmente.fuente
JavaScript (ES6), 105 bytes
Funciona construyendo el resultado de forma recursiva a partir del caso base
/\
. La mitad inferior es solo el caso anterior con cada línea duplicada. La mitad superior era un poco más complicada; parece que quiere tomar el caso anterior y solo mantener los dos lados, pero también tiene que preocuparse por rellenar las cuerdas para duplicar el ancho, por lo que en lugar de eso hago un poco de magia regex. Al tomar los espacios iniciales del caso anterior y dividirlos en cada punto, puedo considerar los espacios antes y después de ese punto. En cada partido, los espacios antes aumentan en 1 y los espacios después disminuyen en 1; esto se puede usar para posicionar el/
y\
en los lugares correctos Las nuevas líneas y el relleno también se agregan aquí; esto se encarga de todo el relleno, excepto un espacio final en cada línea y un espacio inicial en la primera línea que tengo que agregar manualmente. (Los espacios iniciales en las líneas posteriores provienen de la cadena coincidente).fuente
Carbón de leña , 12 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Las longitudes de línea son 1, 1, 2, 4, 8 ... 2 ^ (N-2), por lo tanto, el cálculo incómodo.
fuente
Stax ,
2019 bytesEjecutar y depurarlo
fuente
Lote, 218 bytes.
Nota: la línea 6 termina en un espacio. Funciona moviendo las ramas hacia la izquierda y hacia la derecha cada vez, excepto en las filas que están a 2 n del final, en cuyo caso las ramas se bifurcan.
fuente
Haxe, 181 bytes
O, con algunos espacios en blanco opcionales:
Estuve trabajando durante un tiempo en una solución que creaba primero una matriz de caracteres de espacio del tamaño correcto, luego colocaba de manera iterativa los caminos bifurcados cada vez más bajos (y más densamente en cada iteración). Sin embargo, permaneció más de 230 bytes. El enfoque aquí es más o menos el enfoque de Haskell de @ Laikoni. No podría salirse con la suya
:String
porque Haxe no es lo suficientemente inteligente como para identificar que el tipo de retorno siempre será una Cadena.Esta es solo una función, aquí hay un programa completo para probarlo:
Coloque lo anterior
Main.hx
, compilehaxe -main Main.hx -neko frac.n
y pruebe conneko frac.n 4
(reemplace4
con el orden deseado).fuente
PHP, 188 bytes
Versión en línea
Expandido
fuente