Рыцари, которые говорят только правду, и лжецы, которые всегда лгут, выстроились в ряд. (В ряду хотя бы один человек).Каждый из них произнёс фразу «Все мои соседи лжецы». Обозначим рыцаря буквой Р, а лжеца — буквой Л. Тогда каждой последовательности рыцарей и лжецов, для которой выполняется условие задачи, соответствует некоторое слово.
Опишите это слово, используя формулу, которая называется регулярным выражением. Такое выражение строится с помощью описываемых ниже операций «итерация», «умножение», «сложение».
Так для повторения блока из нескольких букв используйте операцию «звездочка» (итерация), например, (abb)* задает множество слов {пустое слово, abb, abbabb, abbabbabb, …}. Умножение множеств (эту операцию, как обычно в алгебре, изображают точкой приписыванием второго операнда вслед за первым, что мы и будем делать), описывает склейку всех слов первого множества со словами второго (третьего и т. д.), например a*cb* обозначает множество слов: {с, ac, cb, acb, aac,..., aaa...acb...b, ...}. Обратите внимание что слова, в которых нет букв a или b, получаются за счет того, что результат итерации может не содержать символов, то есть быть пустым словом.
Последней операцией, которая используется в формулах, является сложение. Сложение соответствует объединению множеств. Так, обозначение (a + b)*c + d(ac* + ) описывает множество всех последовательностей из букв a и b (обозначается (a + +b)*), к концу которых присоединена буква c, объединенного с множеством слов, начинающихся с буквы d, за которой следует буква a, а за ней любое число букв c и ещё одним однобуквенным словом (d умножить на пустое слово — это d).
У рыцаря не может быть соседей рыцарей, то есть рыцари всегда стоят поодиночке и окружены лжецами. Лжецы могут стоять по одному или по двое, что соответствует регулярному выражению ЛЛ + Л. Вместе мы получаем циклически повторяющийся текст Р(ЛЛ + Л), то есть (Р(ЛЛ + Л))*. (Впрочем, само это выражение пока задаёт некоторые лишние слова — на самом деле, правильная последовательность не может оканчиваться на двух лжецов). Последовательность не может состоять из одних лжецов, ведь тогда они все говорят правду. Значит, там точно есть хотя бы один рыцарь — добавим его к нашей последовательности: (Р(ЛЛ + Л))*Р. У нас получилось выражение, которое задаёт все последовательности, где по краям стоят рыцари. Домножение на (Л+) с обеих сторон даёт эти последовательностям возможность как начинаться/оканчиваться на лжеца, так и не делать этого.
Итак, наш ответ (Л +)(Р(ЛЛ + Л))*Р(Л +).
Ответ: (Л +)(Р(ЛЛ + Л))*Р(Л +).