Двоюродные братья и сестры - Prolog
Формулировка задачи:
Есть такая задача:
Три брата, Пьер, Поль и Жак, во время отпуска собрали всех своих детей в загородном доме. Вот что каждый из детей сказал:
Изабелла. Мне на 3 года больше, чем Жану.
Тереза. Моего отца зовут Жаком.
Ив. Мне на 2 года больше, чем Изабелле.
Мари. Я больше люблю играть с одним из своих кузенов, чем со своим братом.
Катрин. Моего отца зовут Пьером.
Анна. Лучше всего мы ладим с сыновьями дяди Жака.
Жан. Мой отец и каждый из его братьев имеют меньше, чем по четыре ребенка.
Франсуа. А у моего отца их меньше всего.
Каким образом из этого разговора можно определить имя отца каждого из двоюродных братьев и сестер?
Осилил написать только вот это.
Не понимаю, как использовать условия о том, что кто-то кого-то старше, у кого меньше всего детей и кто с кем лучше всего ладит. Как организовать поиск решения? Понимаю, что задача на поиск родственных связей в основном, но эти условия вводят в ступор.
Решение задачи: «Двоюродные братья и сестры»
textual
Листинг программы
solve_names(Solve) :- % Три брата, Пьер, Поль и Жак, во время отпуска собрали всех своих детей в загородном доме. Mans = ["Пьер", "Поль", "Жак"], Childs = [ ["Изабелла", "жен"], ["Жан", "муж"], ["Тереза", "жен"], ["Ив", "муж"], ["Мари", "жен"], ["Катрин", "жен"], ["Анна", "жен"], ["Франсуа", "муж"] ], % Жан. Мой отец и каждый из его братьев имеют меньше, чем по четыре ребенка. Solve = [ [Man1, [Child11, Child12, Child13]], [Man2, [Child21, Child22, Child23]], [Man3, [Child31, Child32]] ], permutation(Mans, [Man1, Man2, Man3]), permutation(Childs, [Child11, Child12, Child13, Child21, Child22, Child23, Child31, Child32]), % Изабелла. Мне на 3 года больше, чем Жану. member([_, FamilyIsabel], Solve), member(["Изабелла", _], FamilyIsabel), not( member(["Жан", _], FamilyIsabel) ), % Тереза. Моего отца зовут Жаком. member(["Жак", FamilyZhack], Solve), member(["Тереза", _], FamilyZhack), % Ив. Мне на 2 года больше, чем Изабелле. member([_, FamilyIv], Solve), member(["Ив", _], FamilyIv), not( member(["Изабелла", _], FamilyIv) ), % Мари. Я больше люблю играть с одним из своих кузенов, чем со своим братом. member([_, FamilyMary], Solve), member(["Мари", _], FamilyMary), member([_, "муж"], FamilyMary), % Катрин. Моего отца зовут Пьером. member(["Пьер", FamilyPier], Solve), member(["Катрин", _], FamilyPier), % Анна. Лучше всего мы ладим с сыновьями дяди Жака. not( member(["Анна", _], FamilyZhack) ), member([SonZhack1, "муж"], FamilyZhack), member([SonZhack2, "муж"], FamilyZhack), not( SonZhack1 = SonZhack2 ), % Франсуа. А у моего отца их меньше всего. member(["Франсуа", _], [Child31, Child32]), true.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д