Dada uma lista de caminhos, produza o caminho correto.
Exemplo de caminho:
/\
----+/
|
-
e|
são caminhos horizontais e verticais./
e\
são curvas de 90 °.+
é tratado como um-
ou|
dependendo da direção atual.
Os caminhos podem seguir qualquer direção e um caractere pode ser usado em vários caminhos.
A entrada será assim:
/--\
A------+--+--#
B------/ \--:
C------------#
D------------#
A
,B
,C
ED
são caminho começa#
é uma parede (o caminho é ruim):
é o fim (o caminho está correto)
Então aqui a saída será B
.
Você pode assumir:
:
e#
sempre será alcançado a partir da esquerda.- O personagem à direita do início de um caminho sempre será
-
. - Os caminhos sempre serão bem formados.
#
e:
sempre estará na mesma coluna.- Sempre haverá apenas um
:
e quatro caminhos.
Casos de teste
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
Como este é o código-golfe , a resposta mais curta ganha.
code-golf
ascii-art
path-finding
TuxCrafting
fonte
fonte
/
ou\
?:
sempre será alcançado a partir da esquerda ou também a partir da parte superior ou inferior? Em outras palavras, poderia haver caracteres diferentes#
ou:
na última coluna?Respostas:
Deslizamento , 47 bytes
Teste aqui.
Sim para recursos não documentados ...
Explicação
Slip é basicamente uma sintaxe regex bidimensional e, por padrão, os programas Slip imprimem o subconjunto da entrada correspondente. Nesse caso, estou simplesmente combinando um caminho válido. Para evitar a impressão de todo o caminho, estou usando os
(?,...)
grupos não documentados que simplesmente indicam que os caracteres correspondentes dentro devem ser omitidos da saída.Quanto ao regex, infelizmente, há alguma duplicação porque
\
e/
precisam ser tratados de forma diferente, dependendo se estamos nos movendo horizontalmente ou verticalmente. No lado positivo, como sabemos que o caminho começa e termina horizontalmente, sabemos que há um número par de\
ou/
em todos os caminhos, para que possamos combinar dois deles por vez.fonte
:)
Python, 221 bytes
O primeiro recuo é apenas um espaço, no loop while é uma guia.
fonte
Javascript (ES6),
117104 bytesCasos de teste:
fonte
Ruby, 140 bytes
Experimente em repl.it: https://repl.it/CyJv
Ungolfed
fonte
Perl 211 bytes
Ungolfed:
Este é o meu primeiro golfe Perl, por isso sugestões são bem-vindas :)
fonte