Resolución de laberintos en Common Lisp
Esta página es para que ustedes suban y ejecuten sus algoritmos de resolución de laberintos 3D. El modo de empleo de esta página es muy similar a la de los Laberintos 2D, así que se recomienda leer primero la introducción de dicha página.
En la barra lateral de la izquierda podrán encontrar el código de ejemplo que explica las funciones que tienen disponibles, además de poder descargar una versión de la biblioteca maze-lib.lsp que podrán usar en caso de que deseen realizar pruebas en su computadora sin necesidad de usar esta página.
Instrucciones de uso
El modo de empleo de esta página es el siguiente:
- Suban su archivo usando el menú ubicado a la izquierda de esta página. Si el código es válido serán enviados a la página para la ejecución de sus algoritmos.
- En el menú de la izquierda se mostrará el nombre del archivo que subieron. Además podrán seleccionar el algoritmo que desean ejecutar, el laberinto que desean resolver, y opcionalmente el tema con el que se dibujará el laberinto.
- Una vez que hayan seleccionado las opciones deseadas podrán ejecutar su código al presionar el botón de "Resolver".
- Si la ejecución de su algoritmo fue exitosa en el laberinto se dibujará en color rojo la ruta de la solución encontrada. Además se desplegarán algunas estadísticas acerca del resultado obtenido. Si ejecutan otro algoritmo la solución previa cambiará a color verde, mientras que la nueva solución encontrada se dibujará en rojo. De igual forma las estadísticas de la solución previa y de la solución actual se mostrarán en el panel izquierdo para que puedan ser comparadas fácilmente.
- Finalmente, si desean subir otro archivo lo podrán hacer usando el panel izquierdo


Codificación de los laberintos
Los laberintos están codificados en un arreglo de dos dimensiones en Common Lisp. Un ejemplo de ello se encuentra dentro de la biblioteca maze-lib. Cada casilla del laberinto está representado por un número del 0 al 15, el cuál indica cuales paredes están presentes.
Las paredes están representadas como un número binario de 4 bits, en donde el bit menos significativo es el de la pared superior y el más significativo es el de la pared izquierda. Si la pared está presente dicho bit es un 1, en caso contrario es un 0. De esta forma, si la casilla no tiene paredes su número es 0 (0000), si todas las paredes están presentes su número es 15 (1111). Esta representación les permite verificar si una pared en particular está presente revisando si el valor de su bit correspondiente es 1 o 0.

Las 16 casillas posibles son las siguientes:
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Además, en los laberintos 3D se cuenta con dos celdas nuevas para los pasos en desnivel. Estas corresponden a los números 16 y 17.
![]() |
![]() |
La funcionalidad de ambas es exactamente la misma, la única diferencia es en la apariencia. Es responsabilidad del usuario que su programa tome en cuenta la situación especial de estas celdas.
Requisitos del código
Dentro del código de ejemplo se explican las funciones que están disponibles para obtener la información del laberinto, además de los requisitos que debe tener su código para que este pueda ser ejecutado correctamente por el servidor.
Validación de la solución obtenida
La solución que haya sido obtenida por su algoritmo será validada por la página. En caso de que la solución no sea correcta se les indicará de la siguiente forma:
- Si la solución realiza un movimiento inválido, ya sea atravesar una pared o salirse de los límites del laberinto, aparecerá el ícono
en el lugar del error
- Si la solución termina antes de llegar a la casilla de la meta, entonces aparecerá un ícono
en donde se detuvo la solución.
Solución de errores frecuentes
Si ocurre algún error al momento de ejecutar su código la página desplegará los mensajes de error emitidos por el intérprete SBCL. Sin embargo, hay ciertos errores que es muy probable que encuentren las primeras veces que estén usando esta página. A continuación se les explicará como solucionarlos:
No aparece el cuadro para seleccionar un algoritmo
Esto puede deberse a los siguientes motivos:
- Olvidaron incluir la biblioteca
maze_lib.lisp
al principio de su código. - Olvidaron colocar como última línea de su código el llamado a la función
(start-maze)
- No agregaron ninguno de sus algoritmos a la lista de funciones disponibles usando la función
add-algorithm
"End of file on #"
Significa que olvidaron cerrar un paréntesis. El mensaje de error les indicará el renglón en el cuál se abre el paréntesis que no se cerró.
"Error opening #P: No such file or directory"
El servidor elimina cada cierto tiempo los archivos subidos para evitar que se acumulen y llenen el espacio disponible. Si aparece este mensaje significa que deben volver a subir su código.