È necessario scrivere un programma o una funzione che riceve una stringa come input e output o restituisce se l'input è un albero ASCII.
_
\/ /
\_/
|
|
Gli alberi ASCII sono composti da caratteri / \ | _ spaces
e newlines
.
I caratteri non bianchi collegano due punti del bordo delle loro celle con un segmento di linea:
/
collega gli angoli in basso a sinistra e in alto a destra\
collega gli angoli in basso a destra e in alto a sinistra|
collega i punti centrali del bordo inferiore e del bordo superiore_
collega gli angoli in basso a sinistra e in basso a destra e il punto centrale del bordo inferiore
(Si noti che ciò significa che |
può connettersi solo con |
o _
ma non con /
o \
.)
Un'immagine ASCII è chiamata albero se si applicano le seguenti regole:
- Esattamente un punto (la radice) di esattamente un carattere tocca il bordo inferiore dell'ultima riga.
Puoi raggiungere qualsiasi punto di qualsiasi segmento di linea:
- a partire dalla radice
- usando solo i segmenti di linea
- mai andare verso il basso (nemmeno lateralmente verso il basso)
Ingresso
- Una stringa composta dai caratteri
/ \ | _ space
enewline
contenente almeno un carattere non di spazi bianchi. Puoi scegliere tra due formati di input:
- Nessuno spazio bianco non necessario attorno all'albero (come mostrato negli esempi).
- Nessuno spazio bianco non necessario attorno all'albero (come visto negli esempi) tranne gli spazi sul lato destro delle file per rendere tutte le file della stessa lunghezza.
Il trascinamento di newline è facoltativo.
Produzione
- Un valore di verità coerente se l'input è un albero ASCII.
- Un valore falsy coerente se l'input non è un albero ASCII.
Esempi
Alberi validi:
|
_
\/ /
\_/
|
|
/ / \/
\ \____/
\/
/
/
\___/
/ \
\___/
|
|
__/
_/
/
____
\ ___
\ \/
\/\_____/
\/ \/
\__/
|
|
Alberi non validi (con spiegazioni extra che non fanno parte degli input):
\/
\_______/
\__ /
| \_/ <- 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)
|
Questo è code-golf, quindi vince l'ingresso più breve.