Debe escribir un programa o función que reciba una cadena como entrada y produzca o devuelva si la entrada es un árbol ASCII.
_
\/ /
\_/
|
|
Los árboles ASCII consisten en caracteres / \ | _ spaces
y newlines
.
Los caracteres que no son espacios en blanco conectan dos puntos de borde de sus celdas por un segmento de línea:
/
conecta las esquinas inferiores izquierda y superior derecha\
conecta las esquinas inferiores derecha e superior izquierda|
conecta los puntos medios del borde inferior y el borde superior_
conecta las esquinas inferiores izquierda e inferior derecha y el punto medio del borde inferior
(Tenga en cuenta que esto significa que |
solo puede conectarse con |
o _
pero no con /
o \
).
Una imagen ASCII se llama árbol si se aplican las siguientes reglas:
- Exactamente un punto (la raíz) de exactamente un carácter toca el borde inferior de la última fila.
Puede llegar a cualquier punto de cualquier segmento de línea:
- a partir de la raíz
- usando solo los segmentos de línea
- nunca ir hacia abajo (ni siquiera de lado hacia abajo)
Entrada
- Una cadena que consta de los caracteres
/ \ | _ space
y quenewline
contiene al menos un carácter que no es un espacio en blanco. Puede elegir entre dos formatos de entrada:
- No hay espacios en blanco innecesarios alrededor del árbol (como se ve en los ejemplos).
- No hay espacios en blanco innecesarios alrededor del árbol (como se ve en los ejemplos) excepto espacios en el lado derecho de las filas para hacer que todas las filas tengan la misma longitud.
La nueva línea final es opcional.
Salida
- Un valor de verdad consistente si la entrada es un árbol ascii.
- Un valor falso falso si la entrada no es un árbol ascii.
Ejemplos
Árboles válidos:
|
_
\/ /
\_/
|
|
/ / \/
\ \____/
\/
/
/
\___/
/ \
\___/
|
|
__/
_/
/
____
\ ___
\ \/
\/\_____/
\/ \/
\__/
|
|
Árboles no válidos (con explicaciones adicionales que no son partes de las entradas):
\/
\_______/
\__ /
| \_/ <- 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)
|
Este es el código de golf por lo que gana la entrada más corta.