Resolución de laberintos en Common Lisp
Esta página es para que ustedes suban y ejecuten sus algoritmos de resolución de laberintos. A continuación se les explicará como se usa esta interfaz, las funciones con las que cuentan para poder obtener información del laberinto, los requisitos que debe cumplir su código, y finalmente información acerca de los mensajes de error que verán en caso de que su código no funcione correctamente.
En la barra lateral de la izquierda se encuentran los enlaces para descargar un código de ejemplo y la biblioteca maze-lib. El código de ejemplo contiene comentarios explicando como se usan las funciones que deben usar para resolver los laberintos. Además, ese mismo código pueden subirlo para probar la funcionalidad de esta página. Por otra parte, bajar el archivo de la biblioteca maze-lib les permitirá realizar pruebas de su tarea sin necesidad de conectarse a 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.

De esta forma las 16 casillas posibles son las siguientes:
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
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:
Después de subir el archivo, no se dibuja el laberinto.
Generalmente la primera vez que se carga la página después de haber iniciado el navegador el laberinto no se despliega correctamente. En ocasiones la parte derecha de la página se muestra completamente en blanco o sólo se dibujan algunas casillas. Para solucionar esto basta con seleccionar otro laberinto del panel de la izquierda.
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ódgo. - 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 inidicará 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.