Sie sollten ein Programm oder eine Funktion schreiben, die eine Zeichenfolge als Eingabe empfängt und ausgibt oder zurückgibt, wenn die Eingabe ein ASCII-Baum ist.
_
\/ /
\_/
|
|
ASCII-Bäume bestehen aus Zeichen / \ | _ spaces
und newlines
.
Die Nicht-Leerzeichen verbinden zwei Randpunkte ihrer Zellen durch ein Liniensegment:
/
Verbindet die untere linke und obere rechte Ecke\
Verbindet die unteren rechten und oberen linken Ecken|
verbindet die Mittelpunkte von Unterkante und Oberkante_
Verbindet die untere linke und die untere rechte Ecke mit dem Mittelpunkt der unteren Kante
(Beachten Sie, dass dies bedeutet, dass |
nur eine Verbindung mit |
oder hergestellt werden kann _
, nicht jedoch mit /
oder \
.)
Ein ASCII-Bild wird als Baum bezeichnet, wenn folgende Regeln gelten:
- Genau ein Punkt (die Wurzel) genau eines Zeichens berührt den unteren Rand der letzten Zeile.
Sie können jeden Punkt eines Liniensegments erreichen, indem Sie:
- ausgehend von der Wurzel
- Verwenden Sie nur die Liniensegmente
- niemals in eine abwärts gerichtete Richtung gehen (nicht einmal seitwärts abwärts)
Eingang
- Eine Zeichenfolge, die aus den Zeichen besteht
/ \ | _ space
undnewline
mindestens ein Nicht-Leerzeichen enthält. Sie können zwischen zwei Eingabeformaten wählen:
- Kein unnötiger Leerraum um den Baum (wie in den Beispielen zu sehen).
- Keine unnötigen Leerzeichen um den Baum (wie in den Beispielen gezeigt) außer Leerzeichen auf der rechten Seite der Zeilen, um alle Zeilen gleich lang zu machen.
Der Zeilenumbruch ist optional.
Ausgabe
- Ein konsistenter Wahrheitswert , wenn die Eingabe ein ASCII-Baum ist.
- Ein konsistenter falscher Wert, wenn die Eingabe kein ASCII-Baum ist.
Beispiele
Gültige Bäume:
|
_
\/ /
\_/
|
|
/ / \/
\ \____/
\/
/
/
\___/
/ \
\___/
|
|
__/
_/
/
____
\ ___
\ \/
\/\_____/
\/ \/
\__/
|
|
Ungültige Bäume (mit zusätzlichen Erklärungen, die nicht Teil der Eingaben sind):
\/
\_______/
\__ /
| \_/ <- reachable only on with downward route
|
_ <- multiple roots
\/ <- multiple root characters
/\ <- multiple roots
| <- unreachable part
|
__/
/ <- unreachable parts
|
\____/
| | <- multiple roots
_\__/ <- unreachable parts (_ and \ don't connect to each other)
|
Dies ist Code-Golf, also gewinnt der kürzeste Eintrag.
quelle
Ruby 226
227 228Online-Test: http://ideone.com/Z7TLTt
Das Programm macht folgendes:
\
,/
oder|
in der letzten Zeile)Hier ist es ungolfed:
quelle