Solver logical problem via prolog
Решение логических задач на PROLOG
Задача
Библиотека о которой пойдет речь, не столь уж велика: просто Пиште вздумалось навести порядок в своих книках. Так и есть! Пяти книг не хватает: томика Жюля Верна, романа Чарльза Диккенса, сборника рассказов Жигмунда Морица, поэмы-трилогии Яноша Араня "Тольди" и сборника стихов Аттилы Йожефа.
Пишта смутно помнил, что кому-то давал эти книги.
Но кому? После многократных попыток Пиште удалось вспомнить следующее:
- К нему в комнату заходили только Андрей, Фери, Илон, Катя и Шаньи, другому никому он книг не давал
- Он всегда строго придерживался правила: одна книга в одни руки.
- Фери как-то раз брал у него Диккенса, но давно возвратил. так что вторично взять эту книгу Фери не мог.
- У Андрея 2 литературные "привязанности": Стихи Аттилы Йожефа и романы Ж.ля Верна (книги других авторов Андрей взять не мог!)
- Катя отдает предпочтение литературе ХХ века
- Илон читака произведения только венгерских авторов
- Шаньи - незименный почитать поэзии. (всей остальной летаратуры для него не существует!) Все ли правильно вспомнил Пишта?
Игра и логика. 85 логических задач. Издательство "Мир". 1975 год.
Цель работы
Нужно написать программу решающую эту логическую задачу.
Run
- Install swi prolog
- Run main.pl
- ? answer(X1,Y1, X2,Y2, X3,Y3, X4,Y4, X5,Y5) . - false
Программа вернула false что свидетельствует о том, что задача противоречива: не все данные задачи согласуются между собой. Следовательно -> Пишта в своих воспоминаниях кое-что напутал.
Пояснение
Сделаем сводную таблицу, если любая строка или столбец будет весь заполнен, то задача не имеет решения.
_ | Верн | Диккенс | Мориц | Янош | Атилла |
---|---|---|---|---|---|
Андрей | 🔒 | 🔒 | 🔒 | ||
Фери | 🔒 | ||||
Илон | 🔒 | 🔒 | |||
Катя | 🔒 | 🔒 | 🔒 | ||
Шаньи | 🔒 | 🔒 | 🔒 |
Вывод
В рассматриваемом случае задача не имеет решения потому, что никто из 5 ребят не мог взять томик Диккенса.