Desafío
Todos sabemos acerca de los árboles de Navidad normales, ¡pero qué tal un árbol de Navidad al revés ! Este es un desafío bastante fácil con temas navideños. El objetivo de este desafío es hacerme un árbol de Navidad invertido ASCII. Aquí están las reglas para este desafío:
- Acepta un número entero extraño y positivo. Puede suponer que siempre estará entre
7y51. La base del árbol estará compuesta por los personajes:
___ \ / |La parte superior del árbol (la estrella) estará compuesta por una sola
*.Cada línea del árbol se construirá utilizando el formato
<?>donde?hay cualquier número de-s. Por ejemplo, si hace una línea de longitud5, la línea debería ser<--->. O si hace una línea de longitud8, la línea debería ser<------>.Así es como se debe construir el cuerpo del árbol:
Tome el número impar
ndado como entrada y cree una línea del árbol de esa longitud.Restar
4deny crear una línea del árbol de esa longitud.Restar
2deny crear una línea del árbol de esa longitud.Decremento
npor2. Después de eso, a menos que seanigual5, regrese al paso 2.
La base (consulte el paso 2), la estrella (consulte el paso 3) y cada línea del árbol (consulte los pasos 4 y 5) deben centrarse utilizando la entrada de número impar original (consulte el paso 1) como máximo anchura.
Ejemplos / Casos de prueba
odd number inputed: 7
___
\ /
|
<-----> line length -> 7
<-> line length -> 7 - 4 = 3
<---> line length -> 7 - 2 = 5
*
odd number inputed: 13
___
\ /
|
<-----------> line length -> 13
<-------> line length -> 13 - 4 = 9
<---------> line length -> 13 - 2 = 11
<-----> line length -> 11 - 4 = 7
<-------> line length -> 11 - 2 = 9
<---> line length -> 9 - 4 = 5
<-----> line length -> 9 - 2 = 7
<-> line length -> 7 - 4 = 3
<---> line length -> 7 - 2 = 5
*
odd number inputed: 9
___
\ /
|
<-------> line length -> 9
<---> line length -> 9 - 4 = 5
<-----> line length -> 9 - 2 = 7
<-> line length -> 7 - 4 = 3
<---> line length -> 7 - 2 = 5
*
odd number inputed: 17
___
\ /
|
<---------------> line length -> 17
<-----------> line length -> 17 - 4 = 13
<-------------> line length -> 17 - 2 = 15
<---------> line length -> 15 - 4 = 11
<-----------> line length -> 15 - 2 = 13
<-------> line length -> 13 - 4 = 9
<---------> line length -> 13 - 2 = 11
<-----> line length -> 11 - 4 = 7
<-------> line length -> 11 - 2 = 9
<---> line length -> 9 - 4 = 5
<-----> line length -> 9 - 2 = 7
<-> line length -> 7 - 4 = 3
<---> line length -> 7 - 2 = 5
*
Reglas
- Se aplican lagunas estándar .
- Este es el código de golf , por lo que gana la respuesta más corta en bytes.

repeat the above steps until the odd number minus 2 equals 5en la primera entrada, el número impar es 7 y 7-2 = 5, por lo tanto, el árbol debe terminar instantáneamente (sé lo que quieres decir, pero necesita reformulación)7la entrada mínima, primero debe crear las tres líneas de árbol (subpasos .1.1, .1.2, .1.3), luego restar2del número impar y probar si es igual5. La instrucción para verificar si el "número impar menos 2 es igual a 5" está al final, los otros tres pasos deben realizarse primero. Pero para responder su primer comentario, estaría bien.7como entrada o si puede aceptar4, como en el cuarto número impar (o3si está indexado a 0).Respuestas:
Python 3 ,
12712110510310098 bytesEsta es una función lambda sin nombre que devuelve una lista de líneas:
Pruébalo en línea!
La parte principal de esta respuesta es
(o-i+2-i%2*3), que calcula el número de guiones para tener en una línea. El resto de la respuesta es simplemente convertir esto en el arte ASCII deseado.Muchas gracias al Sr. Xcoder , por recortar 6 bytes y hablar de golf conmigo en el chat.
¡Gracias también a Lynn por notar que
3*(i%2)puede seri%2*3, 2 bytes más corto!fuente
fcadenas de matemáticaso-i+2-i%2*3Guarda dos bytes.C, 163 bytes
Pruébalo en línea!
Desenrollado:
fuente
Protón , 83 bytes
Gracias a FlipTack por guardar 4 bytes y por colaborar en el chat (en realidad formamos un gran equipo). Indirectamente guardado 2 bytes gracias a Lynn .
Pruébalo en línea!
fuente
Carbón , 28 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Imprime la base.
Pase de la mitad del número de entrada a 1.
Imprima dos líneas, la primera con una más
-que el índice de bucle, la segunda con una menos.Espejo para completar el árbol.
Coloca la estrella.
fuente
SOGL V0.12 ,
3530 bytesPruébalo aquí!
Utiliza el algoritmo de carbón de Neil , toma la entrada como índice en los números impares, por lo que 13 correspondería a la entrada 7
fuente
Retina , 89 bytes
Pruébalo en línea! Explicación: La primera etapa convierte la entrada en unaria y agrega a
>. La segunda etapa reemplaza dos-s con a<para corregir la longitud de la línea. Luego, la tercera etapa replica la rama, pero cada vez un poco más corta hasta que la rama no se puede acortar más. La etapa final agrega la base y la estrella.fuente
Javascript 506 bytes
Versión de golf:
Versión Ungolf:
Uso:
console.log(tree(13)), console.log(tree(17)),ES6 165 bytes (de mi amigo)
Versión de golf:
Versión Ungolf:
Uso:
p(31); p(17);fuente
constpalabras clave, etc.PowerShell , 131 bytes
Pruébalo en línea!
Bueno, este es un desastre para cualquiera que no esté familiarizado con PowerShell ... así que, veamos qué tan bien puedo explicar cómo funciona.
Para la explicación, usaré
input = 17.Comenzamos de manera bastante simple, con la configuración de la variable auxiliar
$i=2y la configuración$xde<something>, con el<something>inicio como un rango desde la entrada$argshasta5, así que17,16,15,...,6,5. Ese rango se bombea en un bucle for.Cada iteración, que se inicia con el establecimiento de la variable de ayuda
$jpara ser el resultado de unifcomunicado,if($_%2){$i-2}else{($i++)}. Si es extraño$j=$i-2, de lo contrario$j=($i++). Esto, junto con$i=2al principio, nos da la secuencia0, 2, 1, 3, 2, 4, 3, 5...que, por casualidad, corresponde exactamente a cuántos espacios necesitamos anteponer a nuestra línea de árbol. ;-) Lo tomamos' 'y multiplicamos por cadenas por ese número.A continuación necesitamos nuestras ramas. Esto se hace con
'<'más la parte media'-'multiplicada, más el final'>'. La multiplicación se realiza reconociendo que la-alternativa en un2, 5, 2, 5, 2...patrón basado en el número de entrada$_, por lo que estamos seleccionando de un pseudoternario basado en ese patrón.Para mayor aclaración, aquí están los primeros dos términos en cada sección:
Así que ahora hemos establecido
$xser una matriz de ramas (es decir, cadenas). Fuera del ciclo, ahora construimos nuestro árbol "arriba" con el número apropiado de espacios guardados$y, luego mostramos nuestras ramas$x, y luego el árbol "abajo" con el*. Cada uno de ellos se deja en la tubería y la salida está implícita con una nueva línea entre los elementos.fuente
JavaScript (ES6),
150147 bytesMostrar fragmento de código
fuente
Lienzo , 28 bytes.
Pruébalo aquí!
Un puerto de mi respuesta SOGL que es un puerto de la respuesta de Neil's Charcoal.
fuente
Mi intento de JS ESGoogoltriplex.
Mostrar fragmento de código
fuente