Introducción
Los cactus vienen en diferentes tamaños, formas y colores. Sin embargo, el cactus más emblemático y imprescindible en todos los occidentales tiene que ser el saguaro . Las características importantes son su tamaño y brazos, que han definido la apariencia estereotípica de los cactus.
Su tarea es traer el saguaro al mundo ASCII. Sin embargo, como en el mundo real, ningún saguaro es como otro, por lo que su programa debe ser capaz de generar saguaros con diferentes configuraciones de brazo.
Un ejemplo de saguaro
- Entrada:
[0b10, 0b11]
([2, 3]
en decimal, longitud de entrada de2
)
_
/ \
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
Presupuesto
Un saguaro siempre tiene una base y una parte superior, con cantidades variables de tallo en el medio. Las partes del tallo no pueden tener brazos, un brazo a la derecha, uno a la izquierda o dos brazos.
Los patrones de crecimiento de Saguaro se proporcionan como una lista de entrada que contiene valores de dos bits. 00
significa sin brazos, 01
un brazo a la derecha, 10
un brazo a la izquierda y11
dos brazos (todo en binario). La longitud de la lista de entrada determina la altura del saguaro.
Las secciones de Saguaro tienen el siguiente aspecto. Las partes del cactus están rodeadas de octothorps #
, para mayor claridad que no se imprimirá.
La altura de un saguaro siempre es igual a los 4+6*k
caracteres para enteros no negativos k
.
#############
# _ # Saguaro top
# / \ #
#############
# _ | | _ # Stem, both arms
#/ \ | | / \# Stem id: 11
#| | | | | |#
#\ \_| |_/ /#
# \__ __/ #
# \ / #
#############
# _ | | # Stem, left arm
#/ \ | | # Stem id: 10
#| | | | #
#\ \_| | #
# \__ | #
# \ | #
#############
# | | _ # Stem, right arm
# | | / \# Stem id: 01
# | | | |#
# | |_/ /#
# | __/ #
# | / #
#############
# | | # Stem, no arms
# | | # Stem id: 00
# | | #
# | | #
# | | #
# | | #
#############
# | | # Saguaro base
# | | #
#############
Entrada
Como se dijo anteriormente, la entrada consiste en una lista de valores de dos bits ( 0, 1, 2, 3
en decimal). Se puede dar en cualquier formato razonable. El primer elemento de la lista corresponde a la parte más alta del tallo del saguaro, el segundo elemento a su segunda parte más alta del tallo, etc.
Si lo desea, puede requerir la longitud de la lista de entrada como una entrada adicional. Especifíquelo en su respuesta si lo hace.
Salida
Su salida ASCII saguaro debe construirse utilizando las partes exactas del vástago como se describió anteriormente. Los espacios finales en una línea y las nuevas líneas finales se ignoran; puede imprimir más, menos o tantos como se especifica arriba.
Reglas
- Se aplican lagunas estándar
- Siendo este código de golf , el recuento de bytes de un programa debe ser mínimo
Casos de prueba
- Un valor atípico. Entrada:
[0b01, 0b00, 0b01, 0b11]
_
/ \
| | _
| | / \
| | | |
| |_/ /
| __/
| /
| |
| |
| |
| |
| |
| |
| | _
| | / \
| | | |
| |_/ /
| __/
| /
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
- Alternancia de brazos. Entrada:
[0b10, 0b01, 0b10]
_
/ \
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
| | _
| | / \
| | | |
| |_/ /
| __/
| /
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
| |
| |
- Una abundancia de armas. Entrada:
[0b11, 0b11]
_
/ \
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
- Sin armas, también conocido como lanza. Entrada:
[0b00]
_
/ \
| |
| |
| |
| |
| |
| |
| |
| |
- Sin cuerpo, algunos lo llaman un cactus joven. Entrada:
[]
_
/ \
| |
| |
fuente
4 1 0 1 3
)Respuestas:
carbón de leña ,
5049 bytesPruébalo en línea!El enlace es a la versión detallada del código. Explicación:
Dibuja la parte superior.
Pase sobre cada lado.
Salta justo debajo del lado derecho de la parte superior.
Pase sobre cada parte del tallo.
Prueba si hay un brazo.
Si es así, imprima un brazo.
De lo contrario, solo imprima una línea vertical.
Después de imprimir el tallo, imprima la base.
Reflexiona listo para dibujar el otro lado. Una vez que se dibujan ambos lados, los lados se reflejan nuevamente en su posición final.
fuente
JavaScript (ES6), 210 bytes
Pasé demasiado tiempo en otra solución antes de darme cuenta de que había una mejor manera, que no me dejó tanto tiempo como me hubiera gustado trabajar en esto.
Intentalo
fuente
00,01,10,11
como entrada, en lugar de entrada binaria o0,1,2,3
. usando casos de prueba OP esto falla.Python 2 , 189 bytes
Pruébalo en línea!
fuente
Python 2 ,
256253 ... 205203199 bytesPruébalo en línea!
fuente
for ...:\n r...\n r...
->for ...:r...;r...
ahorra tres bytes.PowerShell , 235 bytes
Pruébalo en línea!
PowerShell no tiene un
map
ozip
o una manera fácil real para revertir cadenas, por lo que nos queda algo más - reemplazos simples de secciones repetidas.Las primeras dos líneas toman la entrada como una matriz de enteros y generan la parte superior del cactus. Luego recorremos
$a
y seleccionamos en una matriz de cuatro cadenas según el valor actual. Esas cadenas se dejan en la tubería y luego usamos nuestro-replace
para llenar los espacios apropiados. Luego colocamos el fondo del cactus en la tubería también.Todo se recopila de la canalización y
Write-Output
sucede implícitamente al finalizar el programa, insertando una nueva línea entre cada elemento.fuente
05AB1E ,
7675 bytesPruébalo en línea!
fuente
Java (OpenJDK 8) ,
626566499466398312310308 bytesSe puede jugar golf una tonelada
Pruébalo en línea!
fuente
{j=e>1;k=e%2>0;n+=(k?" _ |":g)+(j?" | _,":r)+
an+=((k=e%2>0)?" _ |":g)+((j=e>1)?" | _,":r)+
y retirar el cierre}
del bucle para así.1
y2
.SOGL V0.12 ,
565453 bytesPruébalo aquí!
Explicación:
fuente