Introdução
Você tem a infelicidade de ficar preso em um carro em fuga em uma pista de obstáculos. Todos os recursos do carro não respondem, exceto o sistema de direção, que está danificado. Pode dirigir em linha reta ou virar à direita. O carro pode ser guiado para a segurança?
Mecânica
Seu carro começa no canto superior esquerdo de um mapa 8x8 e está tentando obter segurança no canto inferior direito. O carro tem uma orientação (inicialmente à direita), medida em incrementos de 90 graus. O carro pode executar uma das duas ações:
- Dirija um quadrado para frente ou
- Gire 90 graus no sentido horário e, em seguida, dirija um quadrado à frente
Observe que o carro não consegue girar bruscamente o suficiente para executar uma curva de 180 graus em um único quadrado.
Algumas das praças são obstáculos. Se o carro entrar em uma praça de obstáculos, ele trava. Presume-se que tudo fora do percurso 8x8 seja um obstáculo; portanto, sair do percurso equivale a bater.
O quadrado inferior direito é o quadrado seguro, que permite que o carro escape da pista de obstáculos. Presume-se que o quadrado inicial e o quadrado seguro não sejam obstáculos.
Tarefa
Você deve escrever um programa ou função que tenha como entrada uma matriz 8x8 (matriz, lista de listas etc.), representando a pista de obstáculos. O programa retorna ou imprime um booleano, ou algo semelhante de verdade. Se é possível que o carro chegue ao quadrado seguro sem bater (ou seja, se o mapa for solucionável), a saída é True
, caso contrário, é False
.
Pontuação
Regras padrão de código de golfe - o vencedor é o código com o menor número de bytes.
Bônus:
Se, para um mapa solucionável, o seu código gerar uma série válida de entradas do motorista que guiam o carro até o quadrado seguro, deduza 10 pontos percentuais da sua pontuação. Um exemplo de formato de saída pode ser
SRSSR
(indicando Reta, Direita, Reta, Reta, Direita). Esta saída substituiria aTrue
saída padrão .Se, para um mapa insolúvel, a saída do seu código distingue entre situações em que uma falha é inevitável e situações em que é possível percorrer a pista de obstáculos para sempre, deduza 10 pontos percentuais da sua pontuação. Um exemplo de saída pode ser
Crash
se um acidente for inevitável ouStuck
se o carro ficar preso na pista de obstáculos para sempre. Essas saídas substituiriam aFalse
saída padrão por um mapa insolúvel.
Exemplo
Se o programa receber uma matriz 8x8 como esta:
[[0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0],
[1, 1, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 1, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 1, 0],
[0, 1, 1, 0, 0, 0, 1, 0]]
Seria interpretado como um mapa como este, com quadrados pretos indicando obstáculos:
E uma solução possível pode ser:
Como existe uma solução, o programa deve retornar / imprimir True
para este mapa. A sequência de movimentos mostrada aqui é SSSSRSRRRSRSSRRRSSRSSS
.
Crash
eStuck
. Eles estão aqui por causa de quanto tempo eles são. Linha 2 preenchida, todo o resto vazio ->Crash
. Linha 7 preenchida, todo o resto vazio ->Stuck