Логическая задача Prolog - Prolog (226274)
Формулировка задачи:
Помогите, пожалуйста, решить логическую задачу.
Проблема в том, что нужно и учесть условие "каждый из болельщиков был прав в одном прогнозе и ошибся во втором" и установить между названием команды-местом взаимнооднозначное соответствие. Добавлял объекты для обозначения различных болельщиков, чтобы условие учесть, но тогда соответствия нет, и выводятся лишние варианты. В итоге додумался только сгруппировать в утверждениях условия для каждой команды, но это, очевидно, просто перебор всех вариантов с такими условиями:
Болельщики футбольных команд делали прогнозы об итогах соревнований «Турнир четырех»:
— Я уверен, что Спартак будет чемпионом, а ЦСКА займет последнее место — сказал Иван.
— Что ты, Спартак выше третьего не поднимется, а ЦСКА станет вторым — возразил Сергей.
— Чемпионом будет Динамо, а ЦСКА войдет в тройку сильнейших — сделал свой прогноз Петр.
— Динамо будет вторым, а вот Ротор точно будет последним — промолвил Алексей.
Выяснилось, что каждый из болельщиков был прав в одном прогнозе и ошибся во втором. Как распределились места, занятые командами?
Ещё есть мысль использовать database, но, наверное, это можно решить и без динамической БД.
Решение задачи: «Логическая задача Prolog»
textual
Листинг программы
PREDICATES nondeterm соответствие(symbol, string, string, integer, integer) nondeterm название(string) nondeterm место(integer) nondeterm решение(string, string, string, string, integer, integer, integer, integer) CLAUSES название("Спартак"). название("ЦСКА"). название("Динамо"). название("Ротор"). место(1). место(2). место(3). место(4). соответствие(a, X1, X2, Y1, Y2) :- название(X1), X1 = "Спартак", название(X2), X2 = "ЦСКА", место(Y1), Y1 = 1, место(Y2), Y2 <> 4; название(X1), X1 = "Спартак", название(X2), X2 = "ЦСКА", место(Y1), Y1 <> 1, место(Y2), Y2 = 4. соответствие(b, X1, X2, Y1, Y2) :- название(X1), X1 = "Спартак", название(X2), X2 = "ЦСКА", место(Y1), Y1 <> 1, Y1 <> 2, место(Y2), Y2 <> 2; название(X1), X1 = "Спартак", название(X2), X2 = "ЦСКА", место(Y1), Y1 <> 3, Y1 <> 4, место(Y2), Y2 = 2. соответствие(c, X3, X2, Y3, Y2) :- название(X3), X3 = "Динамо", название(X2), X2 = "ЦСКА", место(Y3), Y3 = 1, место(Y2), Y2 = 4; название(X3), X3 = "Динамо", название(X2), X2 = "ЦСКА", место(Y3), Y3 <> 1, место(Y2), Y2 <> 4. соответствие(d, X3, X4, Y3, Y4) :- название(X3), X3 = "Динамо", название(X4), X4 = "Ротор", место(Y3), Y3 = 2, место(Y4), Y4 <> 4; название(X3), X3 = "Динамо", название(X4), X4 = "Ротор", место(Y3), Y3 <> 2, место(Y4), Y4 = 4. решение(X1, X2, X3, X4, Y1, Y2, Y3, Y4) :- X2 = "ЦСКА", X1 = "Спартак", X3 = "Динамо", X4 = "Ротор", соответствие(a, X1, X2, Y1, Y2), соответствие(b, X1, X2, Y1, Y2), соответствие(c, X3, X2, Y3, Y2), соответствие(d, X3, X4, Y3, Y4), Y1 <> Y2, Y1 <> Y3, Y1 <> Y4, Y2 <> Y3, Y2 <> Y4, Y3 <> Y4. GOAL решение(X1, X2, X3, X4, Y1, Y2, Y3, Y4).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д