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
7
y51
. 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
n
dado como entrada y cree una línea del árbol de esa longitud.Restar
4
den
y crear una línea del árbol de esa longitud.Restar
2
den
y crear una línea del árbol de esa longitud.Decremento
n
por2
. Después de eso, a menos que sean
igual5
, 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 5
en 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)7
la entrada mínima, primero debe crear las tres líneas de árbol (subpasos .1.1, .1.2, .1.3), luego restar2
del 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.7
como entrada o si puede aceptar4
, como en el cuarto número impar (o3
si 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
f
cadenas de matemáticaso-i+2-i%2*3
Guarda 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
const
palabras 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=2
y la configuración$x
de<something>
, con el<something>
inicio como un rango desde la entrada$args
hasta5
, 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
$j
para ser el resultado de unif
comunicado,if($_%2){$i-2}else{($i++)}
. Si es extraño$j=$i-2
, de lo contrario$j=($i++)
. Esto, junto con$i=2
al 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
$x
ser 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