Introdução
Os cactos vêm em vários tamanhos, formas e cores diferentes. No entanto, o cacto mais emblemático e must-have em todos os ocidentais deve ser o saguaro . Características importantes são o tamanho e os braços, que definiram a aparência estereotipada dos cactos.
Sua tarefa é trazer o saguaro para o mundo ASCII. No entanto, - como no mundo real - nenhum saguaro é como outro, portanto, seu programa deve ser capaz de gerar saguaros com configurações de braço variáveis.
Um exemplo de saguaro
- Entrada:
[0b10, 0b11]
([2, 3]
em decimal, comprimento de entrada de2
)
_
/ \
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
Especificações
Um saguaro sempre tem uma base e um topo, com quantidades variáveis de caule no meio. As partes da haste não podem ter braços, um braço à direita, um à esquerda ou dois braços.
Os padrões de crescimento do Saguaro são fornecidos como uma lista de entrada contendo valores de dois bits. 00
significa sem braços, 01
um braço à direita, 10
um braço à esquerda e11
dois braços (todos em binário). O comprimento da lista de entrada determina a altura do saguaro.
As seções do Saguaro são parecidas com as seguintes. As partes dos cactos são cercadas por octothorps #
, para maior clareza que não deve ser impressa.
A altura de um saguaro é sempre igual a 4+6*k
caracteres para números inteiros não 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 dito anteriormente, a entrada consiste em uma lista de valores de dois bits ( 0, 1, 2, 3
em decimal). Pode ser fornecido em qualquer formato razoável. O primeiro elemento da lista corresponde à parte mais alta do tronco do saguaro, o segundo elemento à sua segunda parte mais alta do tronco, etc.
Se desejar, você pode exigir o comprimento da lista de entrada como uma entrada adicional. Por favor, especifique-o na sua resposta, se o fizer.
Saída
Seu saguaro ASCII de saída deve ser construído usando as peças exatas da haste, conforme descrito acima. Os espaços à direita em uma linha e novas linhas à direita são ignorados; você pode imprimir mais, menos ou tantos quantos os especificados acima.
Regras
- Aplicam-se brechas padrão
- Sendo código-golfe , a contagem de bytes de um programa deve ser mínima
Casos de teste
- Um outlier. Entrada:
[0b01, 0b00, 0b01, 0b11]
_
/ \
| | _
| | / \
| | | |
| |_/ /
| __/
| /
| |
| |
| |
| |
| |
| |
| | _
| | / \
| | | |
| |_/ /
| __/
| /
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
- Braços alternados. Entrada:
[0b10, 0b01, 0b10]
_
/ \
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
| | _
| | / \
| | | |
| |_/ /
| __/
| /
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
| |
| |
- Uma abundância de armas. Entrada:
[0b11, 0b11]
_
/ \
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
- Sem armas, também conhecida como lança. Entrada:
[0b00]
_
/ \
| |
| |
| |
| |
| |
| |
| |
| |
- Nenhum corpo, alguns chamam de um cacto jovem. Entrada:
[]
_
/ \
| |
| |
fonte
4 1 0 1 3
)Respostas:
Carvão ,
5049 bytesExperimente online! Link é a versão detalhada do código. Explicação:
Desenhe o topo.
Laço sobre cada lado.
Ir para logo abaixo do lado direito da parte superior.
Faça um loop sobre cada parte da haste.
Teste se existe um braço.
Se sim, imprima um braço.
Caso contrário, basta imprimir uma linha vertical.
Depois de imprimir a haste, imprima a base.
Reflita pronto para desenhar o outro lado. Depois que os dois lados são desenhados, os lados são refletidos de volta à sua posição final.
fonte
JavaScript (ES6), 210 bytes
Passei muito tempo em outra solução antes de perceber que havia uma maneira melhor, que não me deixou tanto tempo quanto eu gostaria de trabalhar nisso.
Tente
fonte
00,01,10,11
como entrada, em vez de entrada binária ou0,1,2,3
. usando casos de teste OP isso falha.Python 2 , 189 bytes
Experimente online!
fonte
Python 2 ,
256253 ... 205203199 bytesExperimente online!
fonte
for ...:\n r...\n r...
->for ...:r...;r...
salva três bytes.PowerShell , 235 bytes
Experimente online!
O PowerShell não tem um
map
ouzip
ou uma maneira muito fácil de reverter cordas, por isso ficamos com algo mais - substituições simples de seções repetidas.As duas primeiras linhas recebem a entrada como uma matriz de números inteiros e produzem a parte superior do cacto. Em seguida, fazemos um loop
$a
e selecionamos uma matriz de quatro strings com base no valor atual. Essas seqüências são deixadas no pipeline e então usamos nosso-replace
para preencher os pontos apropriados. Em seguida, colocamos o fundo do cacto no oleoduto também.Tudo é coletado do pipeline e um implícito
Write-Output
acontece na conclusão do programa, inserindo uma nova linha entre cada elemento.fonte
05AB1E ,
7675 bytesExperimente online!
fonte
Java (OpenJDK 8) ,
626566499466398312310308 bytesPode ser jogado uma tonelada de golfe
Experimente online!
fonte
{j=e>1;k=e%2>0;n+=(k?" _ |":g)+(j?" | _,":r)+
an+=((k=e%2>0)?" _ |":g)+((j=e>1)?" | _,":r)+
e remover o fecho}
do loop for assim.1
e"2
.SOGL V0.12 ,
565453 bytesExperimente aqui!
Explicação:
fonte