Introducción
Tienes la desgracia de estar atrapado en un automóvil fuera de control en una carrera de obstáculos. Todas las características del automóvil no responden, salvo el sistema de dirección, que está dañado. Puede conducir en línea recta o girar a la derecha. ¿Se puede guiar el automóvil hacia la seguridad?
Mecánica
Su automóvil comienza en la esquina superior izquierda de un mapa de 8x8, y está tratando de ponerse a salvo en la esquina inferior derecha. El automóvil tiene una orientación (inicialmente a la derecha), medida en incrementos de 90 grados. El automóvil puede realizar una de dos acciones:
- Conduzca un cuadrado hacia adelante, o
- Gire 90 grados en el sentido de las agujas del reloj, luego conduzca un cuadrado hacia adelante
Tenga en cuenta que el automóvil no puede girar lo suficientemente fuerte como para realizar un giro de 180 grados en una sola casilla.
Algunas de las plazas son obstáculos. Si el automóvil entra en una casilla de obstáculo, se estrella. Se supone que todo lo que está fuera del curso 8x8 es un obstáculo, por lo que salir del curso equivale a estrellarse.
El cuadrado inferior derecho es el cuadrado seguro, que permite al automóvil escapar de la carrera de obstáculos. Se supone que la casilla inicial y la casilla segura no son obstáculos.
Tarea
Debe escribir un programa o función que tome como entrada una matriz de 8x8 (matriz, lista de listas, etc.), que representa la carrera de obstáculos. El programa devuelve o imprime un booleano, o algo similarmente verdadero. Si es posible que el automóvil llegue a la plaza segura sin chocar (es decir, si el mapa tiene solución), la salida es True
, de lo contrario, es False
.
Puntuación
Reglas de golf de código estándar: el ganador es el código con la menor cantidad de bytes.
Bonificaciones:
Si, para un mapa solucionable, su código genera una serie válida de entradas del conductor que guían el automóvil hacia el cuadrado seguro, deduzca 10 puntos porcentuales de su puntaje. Un formato de salida de ejemplo podría ser
SRSSR
(que indica Derecho, Derecho, Derecho, Derecho, Derecho). Esta salida reemplazaría laTrue
salida estándar .Si, para un mapa sin solución, la salida de su código distingue entre situaciones en las que un choque es inevitable y situaciones en las que es posible conducir por la carrera de obstáculos para siempre, deduzca 10 puntos porcentuales de su puntaje. Un resultado de ejemplo podría ser
Crash
si un choque es inevitable, oStuck
si el automóvil está atascado en la carrera de obstáculos para siempre. Estas salidas reemplazarían laFalse
salida estándar para un mapa insoluble.
Ejemplo
Si el programa recibe una matriz de 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]]
Se interpretaría como un mapa como este, con cuadrados negros que indican obstáculos:
Y una posible solución podría ser:
Como existe una solución, el programa debe devolver / imprimir True
para este mapa. La secuencia de movimientos que se muestra aquí es SSSSRSRRRSRSSRRRSSRSSS
.
Crash
yStuck
. Están aquí por lo largos que son. Fila 2 llena, todo lo demás vacío ->Crash
. Fila 7 llena, todo lo demás vacío ->Stuck