Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
146 / 65 / 3
Регистрация: 07.05.2014
Сообщений: 38
1

Common LISP - взлом логического барьера

16.05.2014, 11:19. Показов 1325. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую. На досуге подумал об одной программе. Мои слабые знания не позволяют пока её реализовать. Если кто-нибудь хочет потренировать мозги, милости прошу. Суть такова:

Имеются три барьера, расположенных один за другим в виде массива 3х4.

Третий барьер
((Сегмент-1) (Сегмент-2) (Сегмент-3) (Сегмент-4))
Второй барьер
((Сегмент-1) (Сегмент-2) (Сегмент-3) (Сегмент-4))
Первый барьер
((Сегмент-1) (Сегмент-2) (Сегмент-3) (Сегмент-4))

Программа-взломщик должна проникнуть через все три барьера. Атака начинается с первого барьера. Для проникновения через барьер достаточно взломать один сегмент барьера. Но чтобы взломать сегмент, программа должна ответить на несложный вопрос из области математической логики.

Пример: ? (not (and (or T NIL)
(and T T)
(not (or (and NIL T)
(or T T)))))

Сегмент может иметь либо один фиксированный вопрос, либо выбирать случайным образом вопрос из набора, либо задавать каждый раз новый уникальный вопрос, используя функцию генерации случайных логических вопросов (ещё одна весьма нетривиальная задача).

Сложность вопросов может повышаться от барьера к барьеру, а может и не повышаться.

Программа-взломщик не просто принимает вопросы и решает их, используя средства интерпретатора. Она должна обладать модулем распознавания и сама раскладывать вопросы на базовые логические выражения.

Допустим:

(and (not (or T NIL))
(and T T))

Сперва программа ищет самые "глубокие" логические выражения:

(and T T) и (or T NIL)

Затем программа разбивает выражение на элементы. Программа имеет в своём распоряжении набор правил. Программа знает, что первый элемент выражения всегда есть логический оператор, а второй и опциональный третий элементы есть аргументы. Программа представляет выражения для себя в виде списка. Если первый элемент списка представляет, допустим, атом AND, то выражение вычисляется согласно этому правилу, иначе проводится проверка на другие логические операторы. Представим, что программа вычислила значения двух самых глубоких выражений. Теперь вопрос для неё представляется в таком виде:

(and (not T) T)

Снова вычисляется самое глубоко вложенное выражение:

(and NIL T)

NIL - вопрос решён.

Как только задача решена, программа перезаписывает значение взломанного сегмента и переходит к списку вопросов следующего барьера. Но это ещё не всё. Программа должна обладать неким аналогом зонда. Она должна анализировать длину вопросов и выбирать либо самый сложный, либо самый простой вопрос (в зависимости от желания оператора).

Интерфейс программы. Программа сперва выводит начальное состояние массива. Затем она последовательно описывает шаги своей работы и выводит вопрос, который она решила и номер взломанного сегмента. После взлома всех трёх барьеров выводится конечное состояние массива. Если программа по каким-либо причинам не смогла взломать сегмент, то выводится сообщение об ошибке.


По моим представлениям, работа программы должна выглядеть так:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
[1]>(logic-barrier-hack simple)
 
[2]>
Barrier condition:
 
Third defense line      (SEGMENT-1 SEGMENT-2 SEGMENT-3 SEGMENT-4)
 
Second defense line   (SEGMENT-1 SEGMENT-2 SEGMENT-3 SEGMENT-4)
 
First defense line      (SEGMENT-1 SEGMENT-2 SEGMENT-3 SEGMENT-4)
 
-------------------------------------------------------
 
First defense line - SEGMENT-2 has been breached! 
 
(or (not
        (or
          (and T T)
          (or NIL T)))
     (or T NIL))
 
TRUE
 
Second defense line - SEGMENT-4 has been breached!
 
(and (or
          NIL
          (not
            (and T T)))
        (and NIL T)) 
 
FALSE
 
Third defense line - SEGMENT-1 has been breached!
 
(not
  (not
     (or
       (and
          (not NIL)
          (and T NIL))
       (or
         (or NIL T)
         (and T T)))))
 
TRUE
 
Done.
 
------------------------------------------------
 
Barrier condition:
 
Third defense line      (BREACHED SEGMENT-2 SEGMENT-3 SEGMENT-4)
 
Second defense line   (SEGMENT-1 SEGMENT-2 SEGMENT-3 BREACHED)
 
First defense line       (SEGMENT-1 BREACHED SEGMENT-3 SEGMENT-4)
Ух. Вроде всё.

Добавлено через 9 минут
Эх, напортачил с примерами, а форум не даёт сделать правку. Должно выглядеть так:

Пример:

Lisp
1
2
3
4
5
6
7
8
9
(not
  (and
    (or T NIL)
    (and T T)))
 
(not
  (or
    (and NIL T)
    (or T T)))
И второе выражение:

Lisp
1
2
3
(and
  (not (or T NIL))
  (and T T))
Добавлено через 9 минут
Хм, вроде в редакторе всё выглядело нормально, однако в самом примере работы программы нарушены отступы в логических вопросах. Не знаю, что делать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2014, 11:19
Ответы с готовыми решениями:

Книги или другой источник, где описана история версий Lisp и Common Lisp
Доброго времени суток.Такой вопрос,знаете какой-нибудь источник,где описана история версий Lisp и...

Common lisp
Есть фрагмент программы: (defun game(x y) (cond (( < x y)(print "menshe")(setq y (read))) (( >...

Common lisp
кто поможет решить эти задачи? Перечитайте правила форума. Один вопрос - одна тема. Заголовок...

Common Lisp
Подскажите пожалуйста, а может Common Lisp формировать списки из функций, и (если вдруг может) как?

3
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,643
Записей в блоге: 13
16.05.2014, 12:26 2
Постарайтесь четче сформулировать проблему. Что, собственно, нужно сделать?
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
16.05.2014, 17:18 3
Memex, А что собственно требуется от программы? T, nil как константы редко используются, как правило это результат вычисления выражения. Т.е. программа, на основе имеющихся простеньких логических функций, в виде барьеров должна сгенерировать логичесоке выражение? Все представленные Вами операции за исключением инверсии бинарные, следовательно выражений, должно быть "два штука" для подстановки? Но это же элементарные таблицы истинности и двоичные векторы. Присоединяюсь, в чем собственно вопрос?
0
146 / 65 / 3
Регистрация: 07.05.2014
Сообщений: 38
16.05.2014, 18:23  [ТС] 4
Да, извиняюсь, я весьма размыто сформулировал задачу. В общем, программа-взломщик получает логическое выражение, которое связано с определённым значениям массива, а затем решает его. Работает она с этим выражением, как с набором вложенных списков, начиная вычисление с самых глубоко вложенных списков. Дело в том, что программа не должна просто извлекать выражение и вбивать его в интерпретатор для получения ответа, а должна сама распознавать значения логических операторов, используя не заранее заданные в языке правила, а собственный набор вручную написанных правил. Программа также должна уметь оценивать сложность задаваемого ей вопроса.

Вторая программа (опциональная) является генератором случайных логических выражений произвольной длины (задаваемой пользователем), которые затем связываются с ячейками массива.

Я использую массив, так как он позволяет довольно наглядное отображение работы программы.

Самой сложной задачей для меня является не обозначение правил, а реализация алгоритма вычисления и генератор случайных логических выражений.
0
16.05.2014, 18:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.05.2014, 18:23
Помогаю со студенческими работами здесь

Задача по COMMON LISP
Помогите пожалуйста написать полный код, в котором будет реализовываться функция MyReverseTree: то...

Программа на common lisp
Программа на common lisp Прочитать беззнаковое целое число из стандартного потока ввода и в каждом...

Common Lisp - Матрица
Помогите решить задачу! 1. Нужно написать функции генерации матрицы и ввода матрицы с клавиатуры...

Курсы ФП на Common Lisp
Курс функционального программирования стартует 27 февраля на бесплатном образовательном ресурсе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru