Задача на логику (разноцветные фигуры). Ошибка - Prolog
Формулировка задачи:
Добрый день!
Есть условие задачи: "На столе лежат в ряд четыре фигуры: треугольник, ромб, круг и квадрат. Квадрат,
круг, ромб и треугольник вырезаны из белой, синей, красной и зеленой бумаги. Известно, что:
круг не белый и не зеленый; синяя фигура лежит между ромбом и красной фигурой; треуголь-
ник не синий и не зеленый; квадрат лежит между треугольником и белой фигурой. Из бумаги
какого цвета вырезан ромб?"
Установил ограничения согласно условиям, но при выполнении
Возвращает
Непосредственно написанный код:
Есть идеи в чем может быть ошибка?
Листинг программы
- |:-фигура.
Листинг программы
- false
Листинг программы
- фигура:-
- фигура(Решение), вывод_табл(Решение).
- фигура(Реш) :-
- Реш = [[1,N1,C1],[2,N2,C2],[3,N3,C3],[4,N4,C4]],
- member([СФ,_,синий],Реш), member([РБ,ромб,_],Реш),(РБ =:= СФ + 1; РБ =:= СФ - 1),
- member([СФ2,синий],Реш), member([КФ,_,красный],Реш),(КФ =:= СФ2 + 1; КФ =:= СФ2 - 1),
- member([КФ,квадрат,_],Реш), member([ТК,треугольник,_],Реш),(ТК =:= КФ + 1; ТК =:= КФ - 1),
- member([КФ2,квадрат,_],Реш), member([БЛ,_,белый],Реш),(БЛ =:= КФ2 + 1; БЛ =:= КФ2 - 1),
- not(member([_,круг,белый],Реш)),
- not(member([_,круг,зеленый],Реш)),
- not(member([_,треугольник,синий],Реш)),
- not(member([_,треугольник,зеленый],Реш)),
- перестановка([круг,квадрат,ромб,треугольник],[N1,N2,N3,N4]),
- перестановка([красный,синий,белый,зеленый],[C1,C2,C3,C4]).
- перестановка([],[]).
- перестановка([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.
Решение задачи: «Задача на логику (разноцветные фигуры). Ошибка»
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.
Объяснение кода листинга программы
- В данной программе описывается решение логической задачи о разноцветных фигурах.
- Переменные решения задачи: Реш, СФ, КФ, РБ, БЛ, КВ, ТК, Н.
- Перестановка используется для перебора всех возможных комбинаций цветов фигур.
- Условие задачи описывает, какие цвета не могут быть у фигур.
- Четыре фигуры (круг, квадрат, ромб, треугольник) должны быть раскрашены в четыре цвета (красный, синий, зеленый, белый) таким образом, чтобы выполняться условиям задачи.
- Для каждой фигуры задается условие
Фигура не может быть ...
- Программа перебирает все возможные комбинации цветов фигур и проверяет их на соответствие условиям задачи.
- Если найден вариант раскраски фигур, удовлетворяющий условиям задачи, он выводится на экран в виде таблицы.
- Если не найдено ни одного варианта раскраски фигур, удовлетворяющего условиям задачи, выводится сообщение об ошибке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д