Описание: Протестируем запрос, описывающий дополнительную функцию Интерпретатора - циклическое изменение символов, обозначающих те или иные константы, переменные и операторы. Это должно сильно усложнить восприятие текста кода программы. Константы: a, b, c, d, e, p, t, v, w Переменные: h, q, l, k Примечание: l - переменная, но при этом обознаяает и оператор Операторы: f, g, i, l, m, n Т.е. список всех символов, которые имеют служебное значение в Интерпретаторе следущий. Список символов: a, b, c, d, e, p, t, v, w, h, q, l, k, f, g, i, m, n Все другие символы, в т. числе и на верхнем регистре - ничего не значат в программе и должны быть пропущены. Для формирования более сложного текста кода программы дополним Интерпретатор языка Oflameron функцией ротации управляющих символов. 1. Введем в JavaScript код Интерпретатора внутреннюю переменную STP, в которую пользователем будут помещаться целые числа на этапе редактирования веб страницы. Т.е. в процессе работы веб страницы с Интерпретатором (исполнения кода программы) STP можно считать константой 2. Значение в переменной STP показывает, на сколько нужно сдвинуть ВПРАВО по списку символов a, b, c, d, e, p, t, v, w, h, q, l, k, f, g, i, m, n их функционал. Функционал сдвигается циклически. Пример. Если STP=1 то исходя из списка a принимает значение b=1, b принимает значение с=3, c принимает значение b=5 и т.д. v принимает значение w=73, а при этом w начинает выполнять функции регистра h, h начинает выполнять функции q, символ q начинает выполнять функции l и т.д. Последний символ в строке a, b, c, d, e, p, t, v, w, h, q, l, k, f, g, i, m, n - символ n. Циклически сдвигая функции вправо мы получим, что n должен выполнять функции константы a и т.д. по списку столько циклов, сколько потребуется для исполнения программы. Соответственно, если сдвинуть 18 раз, все символы будут исполнять первоначальные функции. 3. Когда осуществляется сдвиг функций вправо? После исполнения каждого оператора происходит сдвиг функционала на STP вправо. Пример: fcdfhd - сначала исполняется fcd как по умолчанию в алгоритме Интерпретатора. Т.е. выполняется fcd (умножение c на d) и по списку a, b, c, d, e, p, t, v, w, h, q, l, k, f, g, i, l, m, n все сдвигается на STP вправо. Допустим, STP=1, тогда f получает функционал g и теперь обозначает оператор сложения В примере у нас вторым оператором идёт fhd, но теперь это сложение и выполняется сложение h+d Если возникает ошибка, например функционал оператора с двумя параметрами переназначается на оператор с одним параметром (или наоборот), то действие пропускается - стандартная обработка ошибок. Пользователь может намеренно использовать возникающие ошибки для обфускации кода программы. Запрос к Deepseek: Прототип запроса версии 1.3 (с ротацией символов) Напиши HTML+JavaScript код веб-страницы, оптимизированной для просмотра на смартфоне с вертикальной ориентацией. Элементы интерфейса: Заголовок: "Интерпретатор языка Oflameron ver 1.3 (с ротацией)" Поле №1 (textarea): "Простое число (ключ для XOR)" Начальное значение: 176684706477838432958329750074291851582748389687561895812160620129261977163358586401104946332014022802424840484736440263640058869150064213123847594034139965365510006253457917812163931669483321 Подпись: "Введите ключ как строку цифр" Поле №2 (textarea): "Код программы Oflameron" Поле №3 (textarea, readonly): "Результат / Шифротекст" Кнопки: RUN (запуск интерпретатора) XOR (операция с ключом) "Показать таблицу ротации" (для отладки) Блок для сообщений (div) Блок информации о ротации: "STP (шаг ротации) = 1 (измените в коде страницы)" Интерпретатор Oflameron с ротацией: Переменные, константы и параметры: h, q, l, k - числовые переменные, начальное значение 0 для всех STP = 1 (константа ротации, изменяется редактированием HTML-кода страницы) Константы и их значения: a=0, b=1, c=3, d=5, e=7, p=19, t=23, v=43, w=73 Список символов для ротации (18 символов): a, b, c, d, e, p, t, v, w, h, q, l, k, f, g, i, m, n Ротация символов: Принцип: Циклический сдвиг функций символов вправо по списку на STP позиций Когда: После выполнения КАЖДОГО оператора (f,g,i,l,m,nq) Механика: a получает функцию b (значение 1) b получает функцию c (значение 3) ... n получает функцию a (значение 0) Ошибки: Если после ротации оператор получает несоответствующую арность - операция пропускается Период: При STP=1 период ротации = 18 операторов Нормализация чисел: javascript function normalize(num) { while (num > 127) num -= 127; if (num < 0) num = Math.abs(num); return Math.floor(num); } Применяется после КАЖДОЙ математической операции к результату. Допустимые операнды: Константы: a, b, c, d, e, p, t, v, w Переменные: h, q, l k используется ТОЛЬКО как индекс, НЕ как операнд Операторы (до ротации): fXY - умножение: h = normalize(X * Y) (k+3) gXY - сложение: h = normalize(X + Y) (k+3) iXY - вычитание: h = normalize(Math.abs(X - Y)) (k+3) lX - записать в l ASCII-код символа из позиции k + normalize(X) (k+2) mX - вывести символ с кодом normalize(X) в поле #3 (k+2) nq - заменить символ в позиции k + normalize(q) на символ с кодом normalize(h) (k+2) Общие правила: Исполнение строго слева направо k только увеличивается Движение по коду: f,g,i: k+3 l,m,nq: k+2 Ошибка/неизвестный символ: k+1 Ошибка: если ожидается операнд, но символ недопустим > k+1 Неизвестные символы: пропускаются (k+1) Самомодификация: через оператор nq Сброс при RUN: обнулить h,q,l,k, очистить поле #3, сбросить ротацию к началу Защита от циклов: максимум 100000 шагов Механика ротации в деталях: Начальное состояние: символы имеют исходные функции После выполнения каждого оператора: Все символы сдвигаются вправо на STP позиций в списке Новые функции применяются к следующему оператору Пример при STP=1: text Исходно: a=0, b=1, c=3, d=5, ..., f=умножение, g=сложение После первого оператора: a=1, b=3, c=5, ..., f=сложение, g=вычитание Операция XOR: Выполняется: между ключом (поле #1) и текстом (поле #3) Процесс: Взять N = min(длина_ключа, длина_текста) Для i=0..N-1: результат[i] = String.fromCharCode(код_ключа[i] ^ код_текста[i]) Заменить содержимое поля #3 на результат Обратимость: XOR(XOR(текст, ключ), ключ) = текст Функция "Показать таблицу ротации": Показывает текущее состояние ротации Формат: "Символ > Функция (Значение/Тип)" Пример: "a > b (значение 1), f > g (оператор сложения)" Примеры выполнения с ротацией: Пример 1 (STP=1): text Исходный код: fbcgde Шаг 1: fbc выполняется как умножение (b*c = 1*3 = 3, h=3) Ротация: все символы сдвигаются вправо на 1 Шаг 2: gde теперь выполняется как вычитание (g получил функцию i) Вычисление: |d - e| = |5-7| = 2, h=2 Ротация: снова сдвиг на 1 Пример 2 (STP=2): text Исходный код: fbc Шаг 1: fbc выполняется как умножение (1*3=3, h=3) Ротация: сдвиг на 2 позиции Теперь: a>c(3), b>d(5), c>e(7), f>i(вычитание), и т.д. Требования к реализации: Чистый HTML/CSS/JavaScript без внешних библиотек Адаптивная вёрстка для мобильных устройств Кнопка RUN: запускает интерпретатор с кодом из поля #2, сбрасывая ротацию Кнопка XOR: выполняет операцию XOR как описано выше Кнопка "Показать таблицу ротации": показывает текущее состояние Реализация ротации: Массив функций для каждого символа Функция rotateSymbols() вызывается после каждого оператора Таблица преобразования обновляется динамически Сообщения: в отдельном div показывать информацию о ротации Технические детали реализации ротации: javascript // Исходный порядок символов const SYMBOL_ORDER = ['a','b','c','d','e','p','t','v','w','h','q','l','k','f','g','i','m','n']; // Текущее отображение символов на функции let symbolMapping = createInitialMapping(); // Функция ротации function rotateSymbols() { const newMapping = {}; for(let i = 0; i < SYMBOL_ORDER.length; i++) { const fromSymbol = SYMBOL_ORDER[i]; // Сдвиг вправо на STP const toIndex = (i - STP + SYMBOL_ORDER.length) % SYMBOL_ORDER.length; const toSymbol = SYMBOL_ORDER[toIndex]; newMapping[fromSymbol] = symbolMapping[toSymbol]; } symbolMapping = newMapping; } Запрос теперь включает: Полную спецификацию ротации символов Чёткие правила выполнения Примеры работы с ротацией Механизм отладки (кнопка показа таблицы) Все технические детали для реализации Online Processing: https://chat.deepseek.com/share/mkadi3wrxopfdt9wjg