Задача на логику (разноцветные фигуры). Ошибка - Prolog
Формулировка задачи:
Добрый день!
Есть условие задачи: "На столе лежат в ряд четыре фигуры: треугольник, ромб, круг и квадрат. Квадрат,
круг, ромб и треугольник вырезаны из белой, синей, красной и зеленой бумаги. Известно, что:
круг не белый и не зеленый; синяя фигура лежит между ромбом и красной фигурой; треуголь-
ник не синий и не зеленый; квадрат лежит между треугольником и белой фигурой. Из бумаги
какого цвета вырезан ромб?"
Установил ограничения согласно условиям, но при выполнении
Возвращает
Непосредственно написанный код:
Есть идеи в чем может быть ошибка?
Решение задачи: «Задача на логику (разноцветные фигуры). Ошибка»
textual
Листинг программы
/* круг не белый и не зеленый; синяя фигура лежит между ромбом и красной фигурой; треугольник не синий и не зеленый; квадрат лежит между треугольником и белой фигурой */ фигура:- фигура(Решение), вывод_табл(Решение). фигура(Реш) :- Реш = [[1,N1,C1],[2,N2,C2],[3,N3,C3],[4,N4,C4]], перестановка([круг,квадрат,ромб,треугольник],[N1,N2,N3,N4]), перестановка([красный,синий,белый,зеленый],[C1,C2,C3,C4]), %перестановка([круг,квадрат,ромб,треугольник],[N1,N2,N3,N4]), %перестановка([синий,зеленый,белый,красный],[C1,C2,C3,C4]), not(member([_,круг,белый],Реш)), not(member([_,круг,зеленый],Реш)), %not(member([_,ромб,синий],Реш)), %not(member([_,ромб,красный],Реш)), not(member([_,треугольник,синий],Реш)), not(member([_,треугольник,зеленый],Реш)), %not(member([_,треугольник,белый],Реш)), %not(member([_,квадрат,белый],Реш)), member([СФ,_,синий],Реш), member([РБ,ромб,_],Реш), member([КФ,_,красный],Реш), (СФ < РБ, СФ > КФ ; СФ > РБ, СФ < КФ), member([КВ,квадрат,_],Реш), member([ТК,треугольник,_],Реш), member([БЛ,_,белый],Реш), (КВ < ТК, КВ > БЛ ; КВ > ТК, КВ < БЛ). перестановка([],[]). перестановка([X|L],P):-перестановка(L,L1),вставить(X,L1,P). вставить(X,L1,L2):-удалить(X,L2,L1). удалить(X,[X|T],T). удалить(X,[Н|T],[Н|T1]):-удалить(X,T,T1). вывод_табл([A,B,C]) :- Н=['N','Фигура','Цвет'], write('+--+------------+----------+'),nl, writef('|%2L|%12L|%10L|',Н),nl, write('+--+------------+----------+'),nl, writef('|%2L|%12L|%10L|',A),nl, writef('|%2L|%12L|%10L|',B),nl, writef('|%2L|%12L|%10L|',C),nl, write('+--+------------+----------+'),nl.
Объяснение кода листинга программы
- В данной программе описывается решение логической задачи о разноцветных фигурах.
- Переменные решения задачи: Реш, СФ, КФ, РБ, БЛ, КВ, ТК, Н.
- Перестановка используется для перебора всех возможных комбинаций цветов фигур.
- Условие задачи описывает, какие цвета не могут быть у фигур.
- Четыре фигуры (круг, квадрат, ромб, треугольник) должны быть раскрашены в четыре цвета (красный, синий, зеленый, белый) таким образом, чтобы выполняться условиям задачи.
- Для каждой фигуры задается условие
Фигура не может быть ...
- Программа перебирает все возможные комбинации цветов фигур и проверяет их на соответствие условиям задачи.
- Если найден вариант раскраски фигур, удовлетворяющий условиям задачи, он выводится на экран в виде таблицы.
- Если не найдено ни одного варианта раскраски фигур, удовлетворяющего условиям задачи, выводится сообщение об ошибке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д