Você deve escrever um programa ou função que receba uma string como entrada e saia ou retorne se a entrada for uma árvore ASCII.
_
\/ /
\_/
|
|
As árvores ASCII consistem em caracteres / \ | _ spaces
e newlines
.
Os caracteres que não são de espaço em branco conectam dois pontos de extremidade de suas células por um segmento de linha:
/
conecta os cantos inferior esquerdo e superior direito\
conecta os cantos inferior direito e superior esquerdo|
conecta os pontos médios da borda inferior e superior_
conecta os cantos inferior esquerdo e inferior direito e o ponto médio da borda inferior
(Observe que isso significa que |
só pode conectar-se com |
ou _
mas não com /
ou \
.)
Uma imagem ASCII é chamada de árvore se as seguintes regras se aplicarem:
- Exatamente um ponto (a raiz) de exatamente um caractere toca na borda inferior da última linha.
Você pode alcançar qualquer ponto de qualquer segmento de linha:
- começando da raiz
- usando apenas os segmentos de linha
- nunca indo em direção descendente (nem de lado para baixo)
Entrada
- Uma sequência que consiste nos caracteres
/ \ | _ space
enewline
contém pelo menos um caractere que não é um espaço em branco. Você pode escolher entre dois formatos de entrada:
- Não há espaço em branco desnecessário ao redor da árvore (como visto nos exemplos).
- Não há espaço em branco desnecessário ao redor da árvore (como visto nos exemplos), exceto espaços no lado direito das linhas para tornar todas as linhas do mesmo comprimento.
A nova linha à direita é opcional.
Saída
- Um valor de verdade consistente se a entrada for uma árvore ascii.
- Um valor falso consistente se a entrada não for uma árvore ascii.
Exemplos
Árvores válidas:
|
_
\/ /
\_/
|
|
/ / \/
\ \____/
\/
/
/
\___/
/ \
\___/
|
|
__/
_/
/
____
\ ___
\ \/
\/\_____/
\/ \/
\__/
|
|
Árvores inválidas (com explicações extras que não fazem parte das 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)
|
Isso é código-golfe, portanto a entrada mais curta vence.
fonte
Rubi 226
227 228Teste on-line: http://ideone.com/Z7TLTt
O programa faz o seguinte:
\
,/
ou|
sobre a última linha)Aqui é ungolfed:
fonte