Étant donné une liste de chemins, sortez le chemin correct.
Exemple de chemin:
/\
----+/
|
-
et|
sont des chemins horizontaux et verticaux./
et\
sont des virages à 90 °.+
est traité comme un-
ou|
selon la direction actuelle.
Les chemins peuvent aller dans n'importe quelle direction et un personnage peut être utilisé dans plusieurs chemins.
L'entrée sera comme ceci:
/--\
A------+--+--#
B------/ \--:
C------------#
D------------#
A
,B
,C
EtD
sont le chemin commence#
est un mur (le chemin est mauvais):
est la fin (le chemin est correct)
Voici donc la sortie B
.
Vous pouvez supposer:
:
et#
sera toujours atteint par la gauche.- Le caractère à droite du début d'un chemin sera toujours
-
. - Les chemins seront toujours bien formés.
#
et:
sera toujours dans la même colonne.- Il n'y aura toujours qu'un
:
et 4 chemins.
Cas de test
A------#
B------#
C------#
D------:
=>
D
A-\ /---:
B-+-/ /-#
C-+---+-#
D-+---/
\-----#
=>
B
/-\
A-+\\---#
B-/\-\/-#
C----++-#
D----+/
\--:
=>
A
A-\
B-+\
C-++\/----#
D-+++//---:
\++-//--#
\+--//-#
\---/
=>
A
/-\
A-+-/-\
B-+-+-\--#
C-+-/ |/-#
D-\---++-#
\---+/
\--:
=>
B
Puisqu'il s'agit de code-golf , la réponse la plus courte gagne.
code-golf
ascii-art
path-finding
TuxCrafting
la source
la source
/
ou\
?:
toujours accessible par la gauche ou pourrait-il également être atteint par le haut ou le bas? En d'autres termes, pourrait-il y avoir des caractères autres que#
ou:
dans la dernière colonne?Réponses:
Caleçon , 47 octets
Testez-le ici.
Ouais pour les fonctionnalités non documentées ...
Explication
Slip est essentiellement une syntaxe regex bidimensionnelle et par défaut, les programmes Slip impriment le sous-ensemble de l'entrée qu'ils correspondent. Dans ce cas, je fais simplement correspondre un chemin valide. Pour empêcher l'impression de tout le chemin, j'utilise le documentaire
(?,...)
groupes qui indiquent simplement que les caractères correspondants à l'intérieur doivent être omis de la sortie.En ce qui concerne l'expression régulière, malheureusement, il y a une certaine duplication car
\
et/
doivent être traités différemment selon que nous nous déplaçons horizontalement ou verticalement. Du côté positif, puisque nous savons que le chemin commence et se termine horizontalement, nous savons qu'il y a un nombre pair de\
ou/
dans chaque chemin, de sorte que nous pouvons faire correspondre deux d'entre eux à la fois.la source
:)
Python, 221 octets
La première indentation n'est qu'un espace, dans la boucle while c'est un onglet.
la source
Javascript (ES6),
117104 bytesCas de test:
la source
Rubis, 140 octets
Essayez-le sur repl.it: https://repl.it/CyJv
Non golfé
la source
Perl 211 octets
Non golfé:
Ceci est mon premier golf Perl, donc les suggestions sont les bienvenues :)
la source