Estudiantes:
16-10782 Franco Murillo
18-10451 Carlo Herrera
19-10105 Daniela Avendaño
Determina si un mapa es seguro o una trampa con una configuración dada de palancas.
-
Cuando
Palancases instanciado con una constante (nonvar):-
cruzar(Mapa, Palancas, seguro): Es cierto si cruzable(Mapa, Palancas) es verdadero. -
cruzar(Mapa, Palancas, trampa): Es cierto si cruzable(Mapa, Palancas) es falso.
-
-
Cuando
Palancases instanciado con una variable. Generan configuraciones de palancas.-
cruzar(Mapa, Palancas, seguro): Genera combinaciones de palancas usando encontrar_palancas/2 y generar_combinaciones/2 que hacen el mapa cruzable. -
cruzar(Mapa, Palancas, trampa): Genera combinaciones de palancas que hacen el mapa no cruzable.
-
Para esto fue necesario crear funciones auxiliares cruzable/2, encontrar_palancas/2, generar_palancas/3 y generar_palancas/2
- cruzable/2 Determina si un mapa puede ser cruzado con una configuración dada de palancas.
-
Caso Base:
-
cruzable(pasillo(X, regular), Palancas): Es cierto si (X, arriba) está en las palancas. -
cruzable(pasillo(X, de_cabeza), Palancas): Es cierto si (X, abajo) está en las palancas.
-
-
Submapas:
-
cruzable(junta(SubMapa1, SubMapa2), Palancas): Es cierto si ambos submapas son cruzables. -
cruzable(bifurcacion(SubMapa1, SubMapa2), Palancas): Es cierto si al menos uno de los submapas es cruzable.
-
- encontrar_palancas/2. Encuentra todas las configuraciones posibles de palancas para un mapa dado.
-
Pasillos:
encontrar_palancas(pasillo(X, _), [(X, arriba), (X, abajo)]): Encuentra las palancas posibles en un pasillo.
-
Submapas:
-
encontrar_palancas(junta(SubMapa1, SubMapa2), Palancas): Encuentra palancas para una junta combinando las de ambos submapas. -
encontrar_palancas(bifurcacion(SubMapa1, SubMapa2), Palancas): Encuentra palancas para una bifurcación uniendo las de ambos submapas.
-
- generar_combinaciones/3 y generar_combinaciones/2. Genera todas las combinaciones posibles de palancas sin repetir letras.
-
generar_combinaciones([], [], _): Caso base, combinación vacía. -
generar_combinaciones([(Letra, Posicion) | RestoPalancas], [(Letra, Posicion) | Combinaciones], LetrasUsadas): Incluye (Letra, Posicion) en la combinación si la letra no ha sido usada. -
generar_combinaciones([_ | RestoPalancas], Combinaciones, LetrasUsadas): Omite la palanca actual y continúa generando combinaciones. -
generar_combinaciones(Palancas, Combinaciones): Llama a generar_combinaciones/3 con una lista vacía de letras usadas.
Determina si un mapa es siempre seguro, independientemente de la configuración de palancas.
-
Caso Base:
-
siempre_seguro(pasillo(_, regular)): Es cierto para pasillos regulares. -
siempre_seguro(pasillo(_, de_cabeza)): Es falso para pasillos de cabeza.
-
-
Submapas:
-
siempre_seguro(junta(SubMapa1, SubMapa2)): Es cierto si ambos submapas son siempre seguros. -
siempre_seguro(bifurcacion(SubMapa1, SubMapa2)): Es cierto si al menos uno de los submapas es siempre seguro.
-
-
Imprime un mensaje al usuario solicitando el nombre del archivo a leer.
-
Lee el archivo y unifica el mapa que contiene en
Mapa.
Primero inicie el interprete de Prolog ejecutando en la terminal
$ swiplNota: si no tienes el interprete de Prolog en tu ordenador puedes obtenerlo siguiendo estas instrucciones de instalación.
Introduzca y corra en el interprete
?- [celda].Para cargar el archivo principal con los códigos creados para solucionar el problema.
Corra la función
?- leer(Mapa).para unificar el mapa que quiera probar en la variable Mapa.
Utilice los predicados explicados al principio para obtener las respuestas a sus dudas sobre su mapa.
It's a secret to everybody.