Vous devez écrire un programme ou une fonction qui reçoit une chaîne en entrée et sort ou renvoie si l'entrée est une arborescence ASCII.
_
\/ /
\_/
|
|
Les arbres ASCII se composent de caractères / \ | _ spaces
et newlines
.
Les caractères non blancs relient deux points de bord de leurs cellules par un segment de ligne:
/
relie les coins inférieur gauche et supérieur droit\
relie les coins inférieur droit et supérieur gauche|
relie les points médians du bord inférieur et du bord supérieur_
relie les coins inférieur gauche et inférieur droit et le point médian du bord inférieur
(Notez que cela signifie que |
vous ne pouvez vous connecter qu'avec |
ou _
mais pas avec /
ou \
.)
Une image ASCII est appelée un arbre si les règles suivantes s'appliquent:
- Exactement un point (la racine) d'un caractère exactement touche le bord inférieur de la dernière ligne.
Vous pouvez atteindre n'importe quel point de n'importe quel segment de ligne en:
- à partir de la racine
- en utilisant uniquement les segments de ligne
- ne jamais aller vers le bas (même pas latéralement vers le bas)
Contribution
- Une chaîne composée des caractères
/ \ | _ space
etnewline
contenant au moins un caractère non blanc. Vous pouvez choisir entre deux formats d'entrée:
- Aucun espace inutile autour de l'arbre (comme le montrent les exemples).
- Aucun espace inutile autour de l'arborescence (comme illustré dans les exemples) à l'exception des espaces sur le côté droit des lignes pour rendre toutes les lignes de la même longueur.
Le retour à la ligne est facultatif.
Production
- Une valeur véridique cohérente si l'entrée est un arbre ascii.
- Une valeur de falsification cohérente si l'entrée n'est pas un arbre ascii.
Exemples
Arbres valides:
|
_
\/ /
\_/
|
|
/ / \/
\ \____/
\/
/
/
\___/
/ \
\___/
|
|
__/
_/
/
____
\ ___
\ \/
\/\_____/
\/ \/
\__/
|
|
Arbres non valides (avec des explications supplémentaires qui ne font pas partie des entrées):
\/
\_______/
\__ /
| \_/ <- 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)
|
Il s'agit de code-golf, donc l'entrée la plus courte l'emporte.
la source
Ruby 226
227 228Test en ligne: http://ideone.com/Z7TLTt
Le programme fait ce qui suit:
\
,/
ou|
sur la dernière ligne)Ici, il n'est pas golfé:
la source