Einführung
Kakteen gibt es in verschiedenen Größen, Formen und Farben. Allerdings muss der Saguaro der kultigste Kaktus und das Must-Have in jedem Western sein . Wichtige Merkmale sind seine Größe und seine Arme, die das stereotype Erscheinungsbild der Kakteen bestimmt haben.
Ihre Aufgabe ist es, den Saguaro in die ASCII-Welt zu bringen. Wie in der realen Welt gleicht jedoch kein Saguaro einem anderen. Daher muss Ihr Programm in der Lage sein, Saguaros mit unterschiedlichen Armkonfigurationen zu generieren.
Ein Beispiel Saguaro
- Eingabe:
[0b10, 0b11]
([2, 3]
in Dezimalzahl, Eingabelänge von2
)
_
/ \
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
Spezifikationen
Ein Saguaro hat immer eine Basis und eine Spitze mit variablen Mengen an Stiel dazwischen. Die Stielteile können keine Arme, einen Arm rechts, einen links oder zwei Arme haben.
Saguaro-Wachstumsmuster werden als Eingabeliste mit Zwei-Bit-Werten angegeben. 00
bedeutet keine Arme, 01
einen Arm rechts, 10
einen Arm links und 11
zwei Arme (alle in binärer Form). Die Länge der Eingabeliste bestimmt die Höhe des Saguaros.
Saguaro-Abschnitte sehen wie folgt aus. Kaktus-Teile sind aus Gründen der #
Klarheit von Oktothorpen umgeben, die nicht gedruckt werden sollen.
Die Höhe eines Saguars entspricht immer den 4+6*k
Zeichen für nicht negative Ganzzahlen 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
# | | #
#############
Eingang
Wie bereits erwähnt, besteht die Eingabe aus einer Liste von Zwei-Bit-Werten ( 0, 1, 2, 3
in Dezimalform). Es kann in jedem vernünftigen Format angegeben werden. Das erste Element der Liste entspricht dem höchsten Stammteil des Saguaros, das zweite Element dem zweithöchsten Stammteil usw.
Wenn Sie möchten, können Sie die Länge der Eingabeliste als zusätzliche Eingabe benötigen. Bitte geben Sie dies in Ihrer Antwort an.
Ausgabe
Ihr Ausgabe-ASCII-Saguaro sollte aus den exakten Stielteilen wie oben beschrieben erstellt werden. Nachgestellte Leerzeichen in einer Zeile und nachgestellte neue Zeilen werden ignoriert. Sie können mehr, weniger oder so viele wie oben angegeben drucken.
Regeln
- Standard Lücken gelten
- Da es sich um Code-Golf handelt , sollte die Byte-Anzahl eines Programms minimal sein
Testfälle
- Ein Ausreißer. Eingang:
[0b01, 0b00, 0b01, 0b11]
_
/ \
| | _
| | / \
| | | |
| |_/ /
| __/
| /
| |
| |
| |
| |
| |
| |
| | _
| | / \
| | | |
| |_/ /
| __/
| /
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
- Wechselnde Arme. Eingang:
[0b10, 0b01, 0b10]
_
/ \
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
| | _
| | / \
| | | |
| |_/ /
| __/
| /
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
| |
| |
- Eine Fülle von Waffen. Eingang:
[0b11, 0b11]
_
/ \
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
- Keine Waffen, auch als Speer bekannt. Eingang:
[0b00]
_
/ \
| |
| |
| |
| |
| |
| |
| |
| |
- Kein Körper, manche nennen es einen jungen Kaktus. Eingang:
[]
_
/ \
| |
| |
quelle
4 1 0 1 3
)Antworten:
Kohle ,
5049 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Zeichne die Spitze.
Schlaufe über jede Seite.
Springe direkt unter die rechte Seite der Spitze.
Schlinge über jedes Stielteil.
Prüfen Sie, ob ein Arm vorhanden ist.
Wenn ja, drucken Sie einen Arm.
Ansonsten drucken Sie einfach eine vertikale Linie.
Drucken Sie nach dem Drucken des Stiels die Basis.
Reflect bereit, die andere Seite zu zeichnen. Sobald beide Seiten gezeichnet sind, werden die Seiten in ihre endgültige Position zurückgespiegelt.
quelle
JavaScript (ES6), 210 Byte
Ich habe viel zu lange an einer anderen Lösung gearbeitet, bevor mir klar wurde, dass es einen besseren Weg gibt, der mir nicht so viel Zeit lässt, wie ich gerne daran gearbeitet hätte.
Versuch es
quelle
00,01,10,11
indem statt binärer Eingabe oder Literal als Eingabe verwendet wird0,1,2,3
. Bei OP-Testfällen schlägt dies fehl.Python 2 , 189 Bytes
Probieren Sie es online!
quelle
Python 2 ,
256253 ... 205203199 BytesProbieren Sie es online!
quelle
for ...:\n r...\n r...
->for ...:r...;r...
spart drei Bytes.PowerShell , 235 Byte
Probieren Sie es online!
In PowerShell gibt es weder eine
map
nochzip
eine einfache Möglichkeit, Zeichenfolgen umzukehren. Daher bleibt uns noch etwas anderes übrig - einfaches Ersetzen von wiederholten Abschnitten.Die ersten beiden Zeilen nehmen Eingaben als Array von Ganzzahlen entgegen und geben die Spitze des Kaktus aus. Dann durchlaufen wir eine Schleife
$a
und wählen basierend auf dem aktuellen Wert ein Array mit vier Zeichenfolgen aus. Diese Zeichenfolgen verbleiben in der Pipeline, und dann-replace
füllen wir die entsprechenden Stellen mit unserer aus . Dann setzen wir den Boden des Kaktus ebenfalls auf die Pipeline.Alles wird aus der Pipeline gesammelt und ein implizites
Write-Output
Ereignis tritt beim Abschluss des Programms auf, wobei zwischen jedem Element eine neue Zeile eingefügt wird.quelle
05AB1E ,
7675 BytesProbieren Sie es online!
quelle
Java (OpenJDK 8) ,
626566499466398312310308 BytesKann eine Tonne Golf gespielt werden
Probieren Sie es online!
quelle
{j=e>1;k=e%2>0;n+=(k?" _ |":g)+(j?" | _,":r)+
,n+=((k=e%2>0)?" _ |":g)+((j=e>1)?" | _,":r)+
indem Sie auch das Schließen}
der for-Schleife ändern und entfernen .1
und2
.SOGL V0.12 ,
565453 BytesProbieren Sie es hier aus!
Erläuterung:
quelle