Powinieneś napisać program lub funkcję, która odbiera ciąg znaków jako dane wejściowe i wyjściowe lub zwraca, jeśli dane wejściowe są drzewem ASCII.
_
\/ /
\_/
|
|
Drzewa ASCII składają się z znaków / \ | _ spaces
i newlines
.
Nie-białe znaki łączą dwa punkty krawędzi ich komórek za pomocą segmentu linii:
/
łączy lewy dolny i prawy górny róg\
łączy prawy dolny i górny lewy róg|
łączy środkowe punkty dolnej i górnej krawędzi_
łączy lewy dolny i prawy dolny róg ze środkowym punktem dolnej krawędzi
(Należy pamiętać, że oznacza to, że |
może łączyć się tylko z |
albo _
, ale nie z /
lub \
.)
Obraz ASCII jest nazywany drzewem, jeśli mają zastosowanie następujące reguły:
- Dokładnie jeden punkt (pierwiastek) dokładnie jednego znaku dotyka dolnej krawędzi ostatniego rzędu.
Możesz dotrzeć do dowolnego punktu dowolnego segmentu linii poprzez:
- zaczynając od korzenia
- używając tylko segmentów linii
- nigdy nie idąc w dół (nawet w dół w dół)
Wejście
- Ciąg znaków składający się ze znaków
/ \ | _ space
inewline
zawierający co najmniej jeden znak spacji. Możesz wybrać dwa formaty wejściowe:
- Brak zbędnych białych znaków wokół drzewa (jak pokazano w przykładach).
- Żadnych niepotrzebnych białych znaków wokół drzewa (jak pokazano w przykładach), z wyjątkiem spacji po prawej stronie rzędów, aby wszystkie rzędy miały tę samą długość.
Końcowy znak nowej linii jest opcjonalny.
Wynik
- Spójna prawdziwa wartość, jeśli dane wejściowe są drzewem ascii.
- Spójne falsy wartość jeśli wejście nie jest drzewo ASCII.
Przykłady
Prawidłowe drzewa:
|
_
\/ /
\_/
|
|
/ / \/
\ \____/
\/
/
/
\___/
/ \
\___/
|
|
__/
_/
/
____
\ ___
\ \/
\/\_____/
\/ \/
\__/
|
|
Nieprawidłowe drzewa (z dodatkowymi objaśnieniami, które nie stanowią części danych wejściowych):
\/
\_______/
\__ /
| \_/ <- 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)
|
To jest golf golfowy, więc wygrywa najkrótszy wpis.
źródło
Rubinowy 226
227 228Test online: http://ideone.com/Z7TLTt
Program wykonuje następujące czynności:
\
,/
albo|
na ostatnim rzędzie)Tutaj nie jest golfem:
źródło