Промпт для генерирования веб страницы с транслятором языка текстового программирования Oflameron. Язык принципиально развивается в виде промпта, с помощью которого в ИИ можно генерировать транслятор. Язык Oflameron ориентирован больше на обфускацию текстов, чем на криптографию. Запрос к Deepseek: Вот максимально подробный и уточнённый запрос, объединяющий все наши обсуждения. Он включает явные комментарии, описания функций, переменных и все уточнённые моменты работы интерпретатора. Теперь всё готово для генерации идеального кода. Запрос к Deepseek: Прототип запроса версии 1.40 (с ротацией символов) Напиши HTML+JavaScript код веб-страницы, оптимизированной для просмотра на смартфоне с вертикальной ориентацией. Кодировка веб страницы win-1251. Элементы интерфейса: Заголовок страницы (h1): "Интерпретатор языка Oflameron ver 1.40 (с ротацией)". Поле №1 (textarea): id="keyInput", placeholder="Простое число (ключ для XOR)". Начальное значение: гигантское число (см. ниже). Подпись (label): "Введите ключ как строку цифр". Поле №2 (textarea): id="sourceCode", placeholder="Исходный код программы Oflameron". Содержит весь введённый пользователем код, включая необрабатываемые символы. Изменение в этом поле должно автоматически обновлять Поле №3 (очищенный код). Поле №3 (textarea): id="cleanCode", placeholder="Код программы Oflameron (clear)", readonly. Код программы, очищенный от символов, не входящих в список a, b, c, d, e, p, t, v, w, h, q, l, k, f, g, i, m, n. Обновляется в реальном времени при изменениях в Поле №2. Важно: во время выполнения программы (RUN) оператор nq может изменять содержимое этого поля (самомодификация кода), и эти изменения должны быть сразу видны. Поле №4 (textarea, readonly): id="resultText", placeholder="Результат / Шифротекст". Содержит текст, сформированный оператором mX (вывод символа). Поле №5 (textarea, readonly): id="resultNumeric", placeholder="Результат / Шифротекст (десятичные коды)". Содержит тот же результат, что и поле №4, но в виде непрерывной строки десятичных ASCII-кодов каждого символа (например, "Hello" -> "72101108108111"). Обновляется одновременно с полем №4. Кнопки: id="runButton" — RUN. Запускает интерпретатор. id="xorButton" — XOR. Выполняет операцию XOR между текстом из поля №1 (ключ как строка цифр) и текстом из поля №4. Результат помещает в поле №4 (и соответственно в поле №5). id="showRotationButton" — "Показать таблицу ротации". Показывает в блоке сообщений текущее состояние отображения символов на их функции. Блок для сообщений (div): id="messageDiv". Используется для вывода таблицы ротации, сообщений об ошибках, информации о завершении работы (например, "Выполнено за N шагов"). Блок информации о ротации (p или div): "STP (шаг ротации по списку a, b, c, d, e, p, t, v, w, h, q, l, k, f, g, i, m, n) = 1 (измените в JavaScript коде веб страницы)". Начальное значение ключа (для Поля №1): text 176684706477838432958329750074291851582748389687561895812160620129261977163358586401104946332014022802424840484736440263640058869150064213123847594034139965365510006253457917812163931669483321 Спецификация интерпретатора Oflameron с ротацией: 1. Константы и параметры: javascript // Шаг ротации. Для изменения необходимо отредактировать этот код. const STP = 1; // Исходный порядок 18 символов языка. const SYMBOL_ORDER = ['a','b','c','d','e','p','t','v','w','h','q','l','k','f','g','i','m','n']; // Индексы: // 0-8: константы (a,b,c,d,e,p,t,v,w) // 9-12: переменные (h,q,l,k) // 13-17: операторы (f,g,i,m,n) 2. Начальные значения переменных интерпретатора: javascript let h = 0; // Аккумулятор (результат операций f,g,i), источник данных для nq. let q = 0; // Переменная (часто используется как индекс в nq). let l = 0; // Переменная (хранит ASCII-код, прочитанный оператором lX). let k = 0; // Указатель (индекс) текущей позиции в очищенной строке кода (Поле №3). Только увеличивается. Не используется как операнд в вычислениях. 3. Начальные числовые значения констант (до ротации): javascript const INITIAL_CONSTANT_VALUES = { 'a': 0, 'b': 1, 'c': 3, 'd': 5, 'e': 7, 'p': 19, 't': 23, 'v': 43, 'w': 73 }; // Переменные h, q, l, k начальное значение = 0. // Символы f,g,i,m,n не имеют числовых значений, они - операторы. 4. Система типов и отображения (маппинг) символов: Каждый символ из SYMBOL_ORDER в любой момент времени имеет объект-описание, хранящийся в symbolMapping. Объект содержит: type: 'constant', 'variable' или 'operator'. value: числовое значение (для констант и переменных). arity: количество операндов (для операторов: 2 для f,g,i; 1 для l,m; специальный случай для nq). action: функция, выполняющая операцию (для операторов). Функция createInitialMapping() создаёт стартовое отображение, где: a..w — type: 'constant', значение из INITIAL_CONSTANT_VALUES. h,q,l,k — type: 'variable', value: 0. f — type: 'operator', arity: 2, action: 'multiply' (умножение). g — type: 'operator', arity: 2, action: 'add' (сложение). i — type: 'operator', arity: 2, action: 'subtract' (вычитание). m — type: 'operator', arity: 1, action: 'print' (вывод). n — type: 'operator', arity: 'special', action: 'replace' (замена, работает в паре с q). l — type: 'operator', arity: 1, action: 'read' (чтение ASCII). 5. Функция ротации rotateSymbols(): Вызывается после полного выполнения каждого оператора (f,g,i,l,m,nq). Циклически сдвигает функции всех символов вправо на STP позиций в списке SYMBOL_ORDER. Это означает, что каждый символ принимает объект-описание (тип, значение, действие) того символа, который был STP позиций левее в SYMBOL_ORDER. javascript function rotateSymbols() { const newMapping = {}; for (let i = 0; i < SYMBOL_ORDER.length; i++) { const currentSymbol = SYMBOL_ORDER[i]; // Индекс символа, чью функцию мы берём для currentSymbol. const sourceIndex = (i - STP + SYMBOL_ORDER.length) % SYMBOL_ORDER.length; const sourceSymbol = SYMBOL_ORDER[sourceIndex]; newMapping[currentSymbol] = symbolMapping[sourceSymbol]; } symbolMapping = newMapping; } Важно: После ротации символ наследует и тип, и значение, и действие. Например, если после ротации a получил функцию от b, то symbolMapping['a'] становится {type:'constant', value:1, ...}. 6. Функция нормализации normalize(num): Применяется к результату каждой математической операции (в f,g,i) и к операндам X в lX, mX, nq. javascript function normalize(num) { // Приведение к целому числу. num = Math.floor(num); // Приведение к диапазону 0..127 циклическим вычитанием 127. while (num > 127) num -= 127; // Модуль, если отрицательное. if (num < 0) num = Math.abs(num); return num; } 7. Правила исполнения: Исполнение строго слева направо по очищенной строке кода (Поле №3). k — указатель текущей позиции. Только увеличивается. Ошибка/неизвестный символ: Если символ в позиции k не входит в SYMBOL_ORDER (в очищенной строке такого быть не должно) или его текущий type не позволяет выполнить ожидаемую операцию (например, оператор получил недостаточно операндов), интерпретатор просто делает k = k + 1 и переходит к следующему символу. Защита от зацикливания: Максимум 100000 шагов (одно увеличение k = один шаг). При достижении лимита выполнение прерывается, в блок сообщений выводится предупреждение, а сформированный на данный момент результат остаётся в полях №4 и №5. 8. Операторы (в их ИСХОДНОМ состоянии, до ротации): fXY (3 символа): Умножение. X, Y — операнды. Должны быть символами, чей текущий type — 'constant' или 'variable' (т.е. имеют числовое value). Вычисление: h = normalize( getValue(X) * getValue(Y) ). После выполнения: k = k + 3, затем rotateSymbols(). gXY (3 символа): Сложение. X, Y — как выше. Вычисление: h = normalize( getValue(X) + getValue(Y) ). После выполнения: k = k + 3, затем rotateSymbols(). iXY (3 символа): Вычитание. X, Y — как выше. Вычисление: h = normalize( Math.abs( getValue(X) - getValue(Y) ) ). После выполнения: k = k + 3, затем rotateSymbols(). lX (2 символа): Чтение ASCII-кода символа из кода программы. X — операнд (константа или переменная). Вычисление: targetIndex = k + normalize( getValue(X) ). Если targetIndex в пределах строки кода (Поле №3), то взять символ char с этой позиции и записать l = char.charCodeAt(0). Иначе l = 0. После выполнения: k = k + 2, затем rotateSymbols(). mX (2 символа): Вывод символа. X — операнд (константа или переменная). Вычисление: charCode = normalize( getValue(X) ). Действие: char = String.fromCharCode(charCode). Этот символ дописывается в конец строки поля №4 (resultText). Одновременно десятичный код charCode дописывается (как строка) в конец поля №5 (resultNumeric). После выполнения: k = k + 2, затем rotateSymbols(). nq (2 символа): Замена символа в коде программы (самомодификация). Важно: Это единый оператор, состоящий из символов n и q. Интерпретатор ищет именно эту последовательность. Использует текущие значения переменных q и h. Вычисление: targetIndex = k + normalize( q ). Если targetIndex в пределах строки кода (Поле №3), то заменить символ в этой позиции на String.fromCharCode( normalize( h ) ). Критично: Эта замена немедленно изменяет строку в Поле №3 (cleanCode) и, что важнее, внутреннюю строку, по которой продолжает работу интерпретатор. Таким образом, следующие операторы могут читать уже изменённый код. После выполнения: k = k + 2, затем rotateSymbols(). 9. Вспомогательная функция getValue(symbolChar): Возвращает текущее числовое значение символа. Работает только для символов с type: 'constant' или 'variable'. Для операторов возвращает NaN или вызывает ошибку (такой символ не должен подаваться как операнд). javascript function getValue(symbolChar) { const obj = symbolMapping[symbolChar]; if (obj && (obj.type === 'constant' || obj.type === 'variable')) { return obj.value; } return NaN; // Некорректный операнд. } 10. Логика кнопок: RUN: Сбросить переменные: h = q = l = k = 0. Сбросить symbolMapping в начальное состояние (вызвать createInitialMapping()). Полностью очистить поля №4 (resultText) и №5 (resultNumeric). Восстановить содержимое поля №3 (cleanCode), очистив текущее содержимое поля №2 (sourceCode) от всех символов, кроме разрешённых (SYMBOL_ORDER). Это гарантирует, что каждый RUN начинается с исходного кода. Начать интерпретацию с k = 0 по обновлённой строке поля №3. По завершении (достигнут конец кода или 100000 шагов) вывести в messageDiv сообщение (например, "Выполнено за N шагов"). XOR: Взять ключ keyStr = значение поля №1 (keyInput) как строку. Взять текст textStr = значение поля №4 (resultText) как строку. Определить N = Math.min(keyStr.length, textStr.length). Для i = 0 до N-1 вычислить: resultCharCode = keyStr.charCodeAt(i) ^ textStr.charCodeAt(i). Сформировать строку результата из символов String.fromCharCode(resultCharCode). Заменить содержимое поля №4 на эту строку результата. Обновить поле №5: сгенерировать строку десятичных кодов символов результата. "Показать таблицу ротации": Очистить messageDiv. Для каждого символа sym в SYMBOL_ORDER получить его текущий объект obj = symbolMapping[sym]. Сформировать строку описания: Если obj.type === 'constant': "a > b (константа, значение 1)". Если obj.type === 'variable': "h > q (переменная, значение 0)". Если obj.type === 'operator': "f > g (оператор, сложение, arity=2)". Вывести все строки в messageDiv (например, через
или в
).
11. Адаптивный дизайн:

Использовать .

Все textarea должны иметь width: 100%, box-sizing: border-box.

Кнопки крупные, удобные для касания.

Шрифты читаемые на мобильном устройстве.

12. Кодировка и обработка текста:

Указать кодировку .

Всю работу с символами выполнять с помощью стандартных методов JavaScript (.charCodeAt(), String.fromCharCode()), которые работают с Unicode (UTF-16). Это допустимо, так как язык Oflameron оперирует только ASCII-совместимыми символами и кодами 0-127.

Теперь запрос содержит все уточнённые детали и готов к реализации.

https://chat.deepseek.com/share/5uv6th7lkivqkx5mv6

https://t.me/llmsource/429