introduction
Les cactus sont disponibles en différentes tailles, formes et couleurs. Cependant, le cactus et les incontournables les plus emblématiques de tous les occidentaux doivent être le saguaro . Les caractéristiques importantes sont sa taille et ses bras, qui ont défini l'apparence stéréotypée du cactus.
Votre tâche est d'amener le saguaro dans le monde ASCII. Cependant, comme dans le monde réel, aucun saguaro n'est comme un autre, votre programme doit donc être capable de générer des saguaros avec différentes configurations de bras.
Un exemple saguaro
- Entrée:
[0b10, 0b11]
([2, 3]
en décimal, longueur d'entrée de2
)
_
/ \
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
Caractéristiques
Un saguaro a toujours une base et un sommet, avec des quantités variables de tige entre les deux. Les parties de tige ne peuvent pas avoir de bras, un bras à droite, un à gauche ou deux bras.
Les modèles de croissance Saguaro sont donnés sous forme de liste d'entrée contenant des valeurs à deux bits. 00
signifie pas de bras, 01
un bras à droite, 10
un bras à gauche et 11
deux bras (tous en binaire). La longueur de la liste d'entrée détermine la hauteur du saguaro.
Les sections Saguaro ressemblent à ceci. Les parties de cactus sont entourées d'octothorps, #
pour plus de clarté qui ne doit pas être imprimée.
La hauteur d'un saguaro est toujours égale aux 4+6*k
caractères des entiers non négatifs 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
# | | #
#############
Contribution
Comme indiqué précédemment, l'entrée se compose d'une liste de valeurs à deux bits ( 0, 1, 2, 3
en décimal). Il peut être donné dans n'importe quel format raisonnable. Le premier élément de la liste correspond à la partie de tige la plus haute du saguaro, le deuxième élément à sa deuxième partie de tige la plus haute, etc.
Si vous le souhaitez, vous pouvez exiger la longueur de la liste d'entrée comme entrée supplémentaire. Veuillez le préciser dans votre réponse si vous le faites.
Sortie
Votre saguaro ASCII de sortie doit être construit en utilisant les pièces de tige exactes comme décrit ci-dessus. Les espaces de fin sur une ligne et les nouvelles lignes de fin sont ignorés; vous pouvez imprimer plus, moins ou autant que spécifié ci-dessus.
Règles
- Des échappatoires standard s'appliquent
- Ceci étant du code-golf , le nombre d'octets d'un programme doit être minimal
Cas de test
- Une valeur aberrante. Contribution:
[0b01, 0b00, 0b01, 0b11]
_
/ \
| | _
| | / \
| | | |
| |_/ /
| __/
| /
| |
| |
| |
| |
| |
| |
| | _
| | / \
| | | |
| |_/ /
| __/
| /
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
- Bras alternés. Contribution:
[0b10, 0b01, 0b10]
_
/ \
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
| | _
| | / \
| | | |
| |_/ /
| __/
| /
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
| |
| |
- Une abondance d'armes. Contribution:
[0b11, 0b11]
_
/ \
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
- Pas d'armes, également connu comme une lance. Contribution:
[0b00]
_
/ \
| |
| |
| |
| |
| |
| |
| |
| |
- Aucun corps, certains l'appellent un jeune cactus. Contribution:
[]
_
/ \
| |
| |
la source
4 1 0 1 3
)Réponses:
Fusain ,
5049 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Dessinez le haut.
Boucle de chaque côté.
Sautez juste sous le côté droit du haut.
Boucle sur chaque partie de tige.
Testez s'il y a un bras.
Si c'est le cas, imprimez un bras.
Sinon, imprimez simplement une ligne verticale.
Après avoir imprimé la tige, imprimez la base.
Réfléchissez prêt à dessiner l'autre côté. Une fois que les deux côtés sont dessinés, les côtés sont reflétés dans leur position finale.
la source
JavaScript (ES6), 210 octets
J'ai passé beaucoup trop de temps sur une autre solution avant de réaliser qu'il y avait une meilleure solution, ce qui ne m'a pas laissé autant de temps que j'aurais aimé y travailler.
Essayez-le
la source
00,01,10,11
en entrée, au lieu de l'entrée binaire ou0,1,2,3
. en utilisant des cas de test OP, cela échoue.Python 2 , 189 octets
Essayez-le en ligne!
la source
Python 2 ,
256253 ... 205203199 octetsEssayez-le en ligne!
la source
for ...:\n r...\n r...
->for ...:r...;r...
enregistre trois octets.PowerShell , 235 octets
Essayez-le en ligne!
PowerShell ne dispose pas d'un
map
ouzip
ou d'un moyen très simple d'inverser les chaînes, nous nous retrouvons donc avec autre chose - de simples remplacements de sections répétées.Les deux premières lignes prennent l'entrée comme un tableau d'entiers et sortent le haut du cactus. Ensuite, nous parcourons
$a
et sélectionnons un tableau de quatre chaînes en fonction de la valeur actuelle. Ces chaînes sont laissées sur le pipeline, puis nous utilisons notre-replace
pour remplir les emplacements appropriés. Nous mettons ensuite le fond du cactus sur le pipeline également.Tout est collecté à partir du pipeline et un implicite
Write-Output
se produit à la fin du programme, insérant une nouvelle ligne entre chaque élément.la source
05AB1E ,
7675 octetsEssayez-le en ligne!
la source
Java (OpenJDK 8) ,
626566499466398312310308 octetsPeut être joué au golf une tonne
Essayez-le en ligne!
la source
{j=e>1;k=e%2>0;n+=(k?" _ |":g)+(j?" | _,":r)+
pourn+=((k=e%2>0)?" _ |":g)+((j=e>1)?" | _,":r)+
et enlever la fermeture}
de la boucle for ainsi.1
et2
.SOGL V0.12 ,
565453 octetsEssayez-le ici!
Explication:
la source