Элементарно, Ватсон! Что требуют в первую очередь? Выразить ответы дипломатов в символьном виде. Это раз плюнуть:
Ответ дипломата A: C == spy
Ответ дипломата B: B /= spy
Ответ дипломата C: C /= spy
Ответ дипломата D: A == spy
Вместо буржуинского словечка "spy" можно использовать что-нибудь другое: "проклятый вражеский лазутчик", "шпигун" или еще что-то, как кому нравится.
Теперь составляем таблицу с предположениями, кто там из дипломатов "spy", и логическими переменными, характеризующими правдивость ответов дипломатов при любом раскладе. Формализация предположений уже задана: "Let A", "Let B" и так далее. Получаем что-то вроде:
Код:
-------- | Let A | Let B | Let C | Let D |
---------|-------|-------|-------|-------|
C == spy | false | false | true | false |
B /= spy | true | false | true | true |
C /= spy | true | true | false | true |
A == spy | true | false | false | false |
Ну и, соответственно, ищутся нужные варианты: если соврал только один, то должно быть 3 true и 1 false, и т. д.