puzzle

Run Settings
LanguageMercury
Language Version
Run Command
:- module main. :- interface. :- import_module io. :- pred main(io::di, io::uo) is det. :- implementation. :- import_module list, string, solutions. % especificacion de los tipos de datos y los valores posibles :- type origenes ---> ingles; japones; espanol. :- type colores ---> rojo; azul; verde. :- type mascotas ---> jaguar; caracol; cebra. :- type casa ---> casa( origen :: origenes, color :: colores, mascota :: mascotas ). % funcion para determinar que dos casas no sean iguales :- pred distinct(casa::in, casa::in) is semidet. distinct(casa(O1, C1, M1), casa(O2, C2, M2)) :- not (O1 = O2; C1 = C2; M1 = M2). :- pred fila(list(casa)::out) is nondet. fila([X, Y, Z]) :- casa(X), casa(Y), casa(Z), % los japoneses viven a la derecha del cuidador de caracoles X^mascota = caracol <=> Y^origen = japones, Y^mascota = caracol <=> Z^origen = japones, % el cuidador de los caracoles vive a la izquierda de la casa azul Z^color = azul <=> Y^mascota = caracol, Y^color = azul <=> X^mascota = caracol, % los japoneses viven a la derecha del cuidador de caracoles not X^origen = japones, % el cuidador de los caracoles vive a la izquierda de la casa azul not Z^mascota = caracol, distinct(X, Y), distinct(Y, Z), distinct(X, Z). :- pred casa(casa::out) is nondet. casa(casa(O, C, M)) :- % verificamos que los datos de la casa son validos origen(O), color(C), mascota(M), % el ingles vive en la casa roja O = ingles <=> C = rojo, % el jaguar es la mascota de la familia española O = espanol <=> M = jaguar, % los japoneses viven a la dereca del cuidador de caracoles not (O = japones, M = caracol), % el cuidador de caracoles vive a la izquierda de la casa azul not (M = caracol, C = azul). main(!IO) :- solutions(fila, Soluciones), ( if Soluciones = [] then io.write_string("Sin solucion.\n", !IO) else foldl((pred(L::in, !.IO::di, !:IO::uo) is det :- io.print(L, !IO), io.nl(!IO)), Soluciones, !IO) ). :- pred origen(origenes::out) is multi. origen(ingles). origen(japones). origen(espanol). :- pred color(colores). :- mode color(out) is multi. :- mode color(in) is det. color(rojo). color(azul). color(verde). :- pred mascota(mascotas::out) is multi. mascota(jaguar). mascota(caracol). mascota(cebra).
Editor Settings
Theme
Key bindings
Full width
Lines