Introdução
Todo mundo sabe que a possibilidade de navegar com sucesso em um campo de asteróides é de aproximadamente 3.720 a 1. Mas, apesar do seu aviso, Han Solo ainda está disposto a tentar a sorte.
Temendo por sua vida artificial, você decide codificar, no dialeto peculiar do navio ( leia-se: sua linguagem preferida do Code Golf ), um programa de prevenção de asteróides que decidirá qual caminho seguir em um labirinto ASCII de campo de asteróides.
Entrada
O Millenium Falcon possui um programa de mapeamento de campo de asteróides, que fornece dados semelhantes a este:
| ##### ######### |
| ###### # ### # |
| # # # # #### # |
@ ## ####
|# # # ### ## |
|## ## #### # # |
|#### ##### # ## |
As linhas superiores ficam à esquerda do Falcon, as linhas inferiores à direita do Falcon e as colunas representam o que está na frente do navio.
- Cada
#
um é um obstáculo. - Cada espaço é um espaço vazio em que a nave pode voar.
- A entrada tem sempre 7 caracteres de altura. Este é o limite de largura do mapeamento de asteróides.
- A entrada tem sempre 32 caracteres (30 para o próprio campo e 2 para os limites de início e fim). Este é o limite de profundidade do mapeamento de asteróides. Barras verticais
|
marcam o início e o fim do mapeamento. @
é o falcão. Está sempre na linha do meio (quarta linha) e na primeira coluna da entrada.- O espaço deixado nas barras verticais na última coluna é o local em que o navio deve chegar. Está sempre na linha do meio (quarta linha) e na última coluna da entrada.
A entrada pode ser tomada como uma sequência de linhas múltiplas, uma matriz de seqüências de caracteres, a partir de STDIN ou parâmetros de função, ou lida de um arquivo.
Possíveis manobras
Você é perseguido por TIE-Fighters, portanto deve sempre seguir em frente. Existem, portanto, três maneiras pelas quais o navio pode voar em cada etapa:
-
frente/
Para a frente e vire à esquerda\
Avançar e virar à direita
Por exemplo, estes são caminhos válidos:
@---
--
/ \ /
@ -
-
/ \
/ \
@ \
Como você pode ver, sempre há exatamente um movimento por coluna. O Falcon é um pedaço de lixo, portanto não pode fazer curvas violentas. O que significa movimentos como /\
ou não\/
são permitidos . Deve haver pelo menos um avanço puro -
entre dois turnos opostos. Por outro lado, é possível girar em uma direção para várias etapas seguidas, como visto acima.
O Falcon trava se um movimento leva o navio a um ponto em que há um obstáculo. Por exemplo, esses movimentos levam a falhas:
@-#
@
\
#
#
/
@
Observe que isso não é um acidente:
@-#
\
-
Saída
Você deve gerar o mesmo campo de asteróide ASCII, com um caminho válido até o fim. O Falcon deve ser impresso no ponto final em vez do ponto inicial.
Por exemplo, uma saída válida para o exemplo de entrada fornecido anteriormente seria:
| ##### ######### |
| ###### #-------- ### # |
| # # #/ # ####\ # |
--------- ## \ #### ----@
|# # # ### \ ## / |
|## ## #### \ #/ # |
|#### ##### #-- ## |
Seu caminho só precisa não travar o falcão. Não precisa ser o caminho mais curto possível.
Você pode assumir que sempre haverá pelo menos um caminho possível para o fim.
Você pode enviar para STDOUT, em um arquivo ou equivalente, desde que o campo de asteróide seja impresso exatamente como está nesta postagem (por exemplo, a saída de uma lista de coordenadas para o caminho não é válida).
Casos de teste
Um campo normal de asteróides
| ##### ######### | | ###### # ### # | | # # # # #### # | @ ## #### |# # # ### ## | |## ## #### # # | |#### ##### # ## |
Saída possível
| ##### ######### | | ###### #-------- ### # | | # # #/ # ####\ # | --------- ## \ #### ----@ |# # # ### \ ## / | |## ## #### \ #/ # | |#### ##### #-- ## |
Campo de asteróide hiperregular
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | @ # # # # # # # # # # # # # # |# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # |
Saída possível
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | -# #-# #-# #-# #-# #-# #-# #--@ |#\#/#\#/#\#/#\#/#\#/#\#/#\#/# | | #-# #-# #-# #-# #-# #-# #-# #| |# # # # # # # # # # # # # # # |
Núcleo da estrela da morte
| # # # # | | # # # | | # # # # # | @ # # # # # | # # # # | | # # # # # | | # # # # |
Saída possível
| # # # -- # | | --- # # / #\ - | | / #\ # # / # \ /#\ | - # \ # #/ # - # ----@ | # \ # ---- # # | | # \#/ # # # | | # - # # # |
Trincheira da estrela da morte
|##############################| |##############################| |##############################| @ |##############################| |##############################| |##############################|
Saída
|##############################| |##############################| |##############################| ------------------------------@ |##############################| |##############################| |##############################|
Caverna de asteróides
|### ##########################| |## # ############### ## ######| |# ### ######## ### ## # #####| @ ###### ###### ### ## ### |######## ### ### ## #########| |########## # ### ## ##########| |########### #####|
Saída possível
|###-##########################| |##/#\############### ##-######| |#/###--######## ### ##/#\#####| -######\###### ### ##/###-----@ |########--### ### ##/#########| |##########\# ### ##/##########| |###########-------- #####|
Pontuação
O R2D2 está ocupado nadando em pântanos, então você terá que programar o controlador do Falcon sozinho, o que é tedioso. Portanto, o código mais curto vence .
-
no caminho a cada turno, que é definido como um movimento "para frente". Mas os movimentos reais são sempre duas diagonais à esquerda seguidas por duas diagonais à direita.