Autor Tema: ¿Quién está agradecido? Adivinanza usando Prolog

0 Usuarios y 1 Visitante están viendo este tema.

08 Agosto, 2023, 08:31 pm
Leído 496 veces

manooooh

  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,791
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Hola!

Este es uno de los juegos de la Revisa Selecciones Argentina de la edición de agosto 2023:

Kevin y Danielle, junto con sus gemelas de 10 años, Emma y Nina, acaban de sentarse a cenar con los padres de Danielle, Henry y Sophie. Todos los miembros de la familia se sienten agradecidos, pero cada uno por algo diferente. A partir de las siguientes pistas, ¿puede averiguar quién está agradecido y por qué?

Cosas por las que están agradecidos: Su salud, su familia, su perro, esta comida, su trabajo y su hogar.

Pistas:
- Tanto Henry como Sophie están jubilados.
- La persona agradecida por su hogar es la madre de la persona agradecida por su familia.
- La persona agradecida por su salud está casada con la persona agradecida por el festín que tienen delante.
- Nina está agradecida por su enérgico schnauzer.
- No se sabe por lo que está agradecido Henry.

Mi intento:

Para resolver el acertijo mi idea fue usar Prolog para que el motor se encargue de responder a la consulta:

Código: [Seleccionar]
?- estaAgradecidaPor(Persona, Cosa).
por lo cual el predicado estaAgradecidaPor/2 debe ser totalmente inversible.

Sin embargo, no tuve éxito.

A continuación lo que intenté, ¿podrán ayudarme?

Código: [Seleccionar]
persona(kevin).
persona(danielle).
persona(emma).
persona(nina).
persona(henry).
persona(sophie).

esPadre(kevin).
esMadre(danielle).

estanCasados(kevin, danielle).

agradecimiento(salud).
agradecimiento(familia).
agradecimiento(perro).
agradecimiento(comida).
agradecimiento(trabajo).
agradecimiento(hogar).

jubilado(henry).
jubilado(sophie).

% estaAgradecidaPor(Persona, Cosa)
estaAgradecidaPor(Persona, hogar) :-
    persona(Persona),
    esMadre(Persona),
    estaAgradecidaPor(Persona, familia).

estaAgradecidaPor(Persona, salud) :-
    persona(Persona),
    estanCasados(Persona, OtraPersona),
    estaAgradecidaPor(OtraPersona, comida),
    Persona \= OtraPersona.

estaAgradecidaPor(nina, perro).

Para mí la última pista: No se sabe por lo que está agradecido Henry. no aporta nada, ya que por el Principio del Universo Cerrado todo lo que no es cierto, se asume como falso y por lo tanto no forma parte de la base de conocimientos. O ver un PDF aquí: https://www.uomustansiriyah.edu.iq/media/lectures/9/9_2019_01_06!05_04_46_PM.pdf

Gracias!!
Saludos

08 Agosto, 2023, 08:36 pm
Respuesta #1

manooooh

  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,791
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Dejo la versión al programa en la web para que se puedan hacer pruebas:

https://swish.swi-prolog.org/p/ReunionAgradecida.pl