Schreiben Sie ein Programm oder eine Funktion, die eine nicht leere Liste von ganzen Zahlen in einem angemessenen Format wie 4, 0, -1, -6, 2
oder enthält [4 0 -1 -6 2]
.
Drucken Sie eine Zeichenfolge, die die Liste als ASCII-Gesamtstruktur darstellt, oder geben Sie sie zurück, wobei jede Zahl zu einem Baum proportionaler Höhe wird. Jeder Baum nimmt wie folgt vier Textspalten in der Ausgabe auf:
Eine positive ganze Zahl N wird zu einem Baum, dessen Basis
__|_
und Spitze^
N Schichten/ \
dazwischen haben.Wenn beispielsweise N = 1 ist, ist der Baum
^ / \ __|_
wenn N = 2 ist, ist der Baum
^ / \ / \ __|_
wenn N = 3 ist, ist der Baum
^ / \ / \ / \ __|_
und so weiter.
Eine negative ganze Zahl N wird genau wie der entsprechende positive Baum, außer dass ein vertikaler Strich zwischen den Verzweigungsschrägstrichen anstelle eines Leerzeichens steht.
Wenn beispielsweise N = -1 ist, ist der Baum
^ /|\ __|_
wenn N = -2 ist der Baum
^ /|\ /|\ __|_
wenn N = -3 ist der Baum
^ /|\ /|\ /|\ __|_
und so weiter.
Wenn die Ganzzahl 0 ist, gibt es technisch gesehen keinen Baum, nur eine leere Stelle mit vier Unterstrichen:
____
Die Unterstriche an der Basis jedes Baums müssen in der Ausgabe ausgerichtet sein, dh alle Bäume müssen ihre Basis auf derselben Ebene haben. Außerdem wird nach dem letzten Baum ein einzelner Unterstrich am Ende der Zeile mit Unterstrichen eingefügt. Dies macht es so, dass jeder Baum eine leere Luftsäule auf beiden Seiten hat.
Als Beispiel 4 0 -1 -6 2
wäre die Ausgabe für
^
/|\
^ /|\
/ \ /|\
/ \ /|\ ^
/ \ ^ /|\ / \
/ \ /|\ /|\ / \
__|_______|___|___|__
Beachten Sie, dass die Baummuster immer eine führende Spalte mit leerem Raum haben, aber ein Unterstrich hinzugefügt werden musste, um die rechte Seite des letzten Baums aufzufüllen.
Ebenfalls:
- Nachgestellte Leerzeichen in allen Zeilen sind in Ordnung, es sollten jedoch keine unnötigen führenden Leerzeichen vorhanden sein.
- Führende Zeilenumbrüche sind nicht zulässig (der höchste Baum sollte den oberen Rand des Ausgabetextgitters berühren), und es ist nur eine abschließende Zeile zulässig.
- Die Liste kann ganze Zahlen von -250 bis 250 enthalten. Der Umgang mit höheren Bäumen ist nicht erforderlich.
Der kürzeste Code in Bytes gewinnt.
Mehr Beispiele
3
:
^
/ \
/ \
/ \
__|__
-2
:
^
/|\
/|\
__|__
0
:
_____
0, 0
:
_________
0, 1, 0
:
^
/ \
______|______
0, -1, 2, -3, 4
:
^
^ / \
^ /|\ / \
^ / \ /|\ / \
/|\ / \ /|\ / \
______|___|___|___|__
quelle
_
nach dem letzten Baum einen abschließenden (Unterstrich) einzufügen._
.Python 2, 165 Bytes
Dies ist ein vollständiges Programm, das eine Liste als Eingabe akzeptiert. Ich spiele immer noch dieses schreckliche Durcheinander.
quelle
PHP, 231
277BytesDiese Herausforderung hat eine schöne Leistung.
Liest eine durch Kommas getrennte Liste (Leerzeichen sind optional) von
STDIN
:Ungolfed
Bearbeitungen
if/else
ternäre Operatoren ersetzt und einige der Variablen verschoben, um einige Bytes zu sparen.quelle
Ruby,
157156153 ZeichenGeschrieben, nur weil es anfangs
Array.transpose
wie eine gute Idee aussah. Nicht länger.Probelauf:
quelle
C #, 318 Bytes
Ich habe versucht, das Array zu transponieren. Ich bin mir nicht sicher, ob das die beste Lösung war.
Einrückung und Zeilenumbrüche für mehr Klarheit:
quelle