Bob foi sequestrado e está preso em um labirinto. Seu trabalho é ajudá-lo a encontrar uma saída. Mas como é um labirinto muito escuro e assustador, ele não consegue ver nada. Ele só pode sentir paredes quando corre para dentro dela, e sabe quando encontrou a saída, mas não sabe mais nada sobre isso.
Como ele precisa executar o programa pela memória, ele deve ser o mais curto possível.
Nota: Eu peguei esse problema em http://acmgnyr.org/year2016/problems.shtml , mas o adaptei um pouco e escrevi pessoalmente o programa / teste dos juízes.
Especificação
- Este é um problema interativo, portanto, o programa produzirá movimentos para o stdout e obterá respostas do stdin.
- Seu programa pode um dos movimentos de saída
right
,left
,down
,up
. - Ele obterá como entrada um dos seguintes:
wall
- isso significa que Bob bateu em uma parede. Bob ficará no mesmo lugar.solved
- Bob encontrou a saída! Seu programa agora também deve sair sem imprimir mais nada.ok
- Bob foi capaz de se mover na direção dada.
- Se o labirinto não tiver saída, seu programa deverá ser exibido
no exit
para que Bob saiba que ele deve desistir. Seu programa deve sair sem imprimir mais nada. - Como Bob está com pressa de sair, seu programa não deve fazer movimentos estranhos. Em outras palavras, seu programa não tem permissão para se mover na mesma direção do mesmo quadrado duas vezes .
- Isso é código-golfe , e o programa mais curto vence!
Exemplos
Nos exemplos a seguir, S
é o quadrado inicial, X
é a saída, #
é uma parede e os espaços são quadrados válidos. Como não há uma resposta correta, essas são apenas exemplos de execuções de uma solução. Observe também que os desenhos do labirinto estão lá para você ver, e seu programa não os receberá como entrada.
########
#S #
###### #
# #
#X#
right
ok
right
ok
right
ok
right
ok
right
ok
right
wall
down
ok
right
wall
down
ok
right
wall
down
solved
#####
# S #
#####
right
ok
right
wall
down
wall
up
wall
left
ok
down
wall
up
wall
left
ok
down
wall
up
wall
left
wall
right
ok
no exit
solved
###############################
#S #
############## ### #
# #X# #
# #
##################
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
wall
down
ok
right
wall
down
ok
right
wall
down
ok
right
wall
down
wall
left
ok
down
wall
up
ok
up
ok
left
ok
down
ok
down
ok
down
wall
left
ok
down
wall
up
ok
up
ok
left
ok
down
ok
down
ok
down
wall
left
ok
down
wall
up
ok
up
ok
left
wall
down
ok
left
wall
down
ok
left
ok
down
wall
up
wall
left
ok
down
wall
up
solved
Programa Checker
- Eu escrevi um verificador de solução em Python. Você pode encontrá-lo em https://gist.github.com/Maltysen/f0186019b3aa3812d812f8bb984fee19 .
- Execute como
python mazechecker.py ./mazesolver
. - Ele testará seu programa em todos os labirintos em uma pasta chamada
mazes
. - Os labirintos estão em arquivos separados no mesmo formato acima.
- Ele verifica todas as condições listadas acima e notifica se sua solução viola alguma.
- Você pode imprimir informações adicionais de diagnóstico com
python mazechecker.py -d ./mazesolver
. - Você pode encontrar uma
mazes
pasta compactada aqui . Você também pode adicionar seus próprios, se quiser.
solved
Recebemos um quando a saída no exit
? Nesse caso, indique-o nas regras, não apenas nos casos de teste!
x,y
e vá up
, com resposta wall
, depois right
com resposta novamente wall
, posso tentar up
novamente, ou estão disponíveis left
e down
ainda estão disponíveis desde que ainda não me mudei desta praça?