Логическая задача про Чука и Гека - Prolog

Узнай цену своей работы

Формулировка задачи:

3. Может быть, вы и не поверите, но в одном городке жили два чудака — Чук и Гек. Чук совершенно не мог говорить правду по понедельникам, вторникам и средам, хотя в остальные дни он неизменно был правдив. А Гек врал по вторникам, четвергам и субботам, но в другие дни он говорил только правду. Как-то я повстречал эту неразлучную пару и спросил одного из них: − Скажи пожалуйста, как тебя зовут? Тот без малейшего колебания ответил: − Чук. А скажи-ка мне, какой сегодня день недели? –Вчера было воскресенье, сказал мой собеседник. − А завтра будет пятница, − добавил его приятель. − Подожди, как же так? − изумился я, обращаясь к приятелю моего собеседника. – Ты уверен, что говоришь правду? − Я всегда говорю правду по средам, − услышал я в ответ. Решив, что больше со мной говорить не о чем, приятели пошли дальше, оставив меня в полном недоумении. Но. подумав, я все-таки сообразил, кто из двух друзей был Чук, а кто − Гек. Между прочим, по разговору можно установить и день недели, в который я встретился с ними. Попробуйте сообразить и вы.

Решение задачи: «Логическая задача про Чука и Гека»

textual
Листинг программы
day(chuk,pn,0).
day(chuk,vt,0).
day(chuk,cr,0).
day(chuk,ch,1).
day(chuk,pt,1).
day(chuk,cb,1).
day(chuk,vc,1).
day(gek,pn,1).
day(gek,vt,0).
day(gek,cr,1).
day(gek,ch,0).
day(gek,pt,1).
day(gek,cb,0).
day(gek,vc,1).
 
other(gek, chuk).
other(chuk, gek).
 
test1(0, First) :- First \= chuk.
test1(1, First) :- First = chuk.
 
test2(0, Today) :- Today \= pn.
test2(1, Today) :- Today = pn.
 
test3(0, Today) :- Today \= ch.
test3(1, Today) :- Today = ch.
 
test4(SecondTrue, Second) :-
    day(Second, cr, SecondTrue).
 
 
solve :-
    day(First, Today, FirstTrue),
    other(First, Second),
    day(Second, Today, SecondTrue),
    
    test1(FirstTrue, First),
    test2(FirstTrue, Today),
    test3(SecondTrue, Today),
    test4(SecondTrue, Second),
    
    write('First: '), write(First), nl,
    write('Second: '), write(Second), nl,
    write('Today: '), write(Today), nl,
    fail.
solve :-
    write('--- End of solutions'), nl.

Объяснение кода листинга программы

  1. Переменные:
    • chuk
    • gek
    • pn (предположительно имя)
    • vt (предположительно имя)
    • cr (предположительно имя)
    • ch (предположительно имя)
    • pt (предположительно имя)
    • cb (предположительно имя)
    • vc (предположительно имя)
    • First (первый элемент)
    • Second (второй элемент)
    • Today (предположительно имя)
    • FirstTrue (значение первого элемента)
    • SecondTrue (значение второго элемента)
  2. Код описывает логическую задачу про Чука и Гека. Предполагается, что переменные chuk и gek обозначают двух человек, а переменные pn, vt, cr, ch, pt, cb и vc обозначают различные свойства или характеристики этих людей.
  3. Программа содержит несколько правил для определения значений переменных и проверки их на соответствие определенным условиям. Например, правило day(chuk,pn,0) говорит о том, что если pn равно нулю, то у Чука есть свойство pn. Аналогично для других правил.
  4. Программа также содержит несколько правил для проверки истинности условий. Например, правило test1(0, First) говорит о том, что если First не равно chuk, то условие считается истинным. Аналогично для других правил.
  5. Главная часть программы представляет собой цикл solve, который рекурсивно генерирует все возможные комбинации значений переменных и проверяет их на соответствие условиям. Если найдено решение, программа выводит значения переменных на экран. Если решений нет, программа выводит сообщение --- End of solutions.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5