Описание https://t.me/llmsource/ Язык программирования текстов Oflameron предназначен для обфускации и шифрования текстов. Ключевые особенности: - язык Oflameron существует в виде двух AI промптов - для составления кода программы по шифруемому тексту и для трансляции кода в исходный текст - язык Oflameron открыт для развития сообществом на основе MIT License Т.к. в основе языка Oflameron лежат AI промпты, практически каждая генерация кода программы отличается от других, что усложняет ее анализ. Для криптографической защиты используется XOR преобразование. Необходимо ввести случайное число длиной не менее длины текста AI промпты предоставляются "как есть". Версии спецификаций промптов не являются окончательными. (c) by Valery Shmelev https://oflameron.com ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Запрос к ИИ: Прототип запроса версии 1.50 gen 7 (с уточнённой ротацией) 12.02.2026 Напиши HTML+JavaScript код веб-страницы, оптимизированной для просмотра на смартфоне с вертикальной ориентацией. Кодировка веб страницы UTF-8 В JavaScript используются две "стандартизованные" переменные: 1. Переменная SYMBOL_ORDER = ['a','b','c','d','e','p','t','v','w','h','q','l','k','f','g','i','m','n'] - список обрабатываемых в языке Oflameron символов. Как интерпретатор должен обрабатывать символы не из SYMBOL_ORDER? Только пропускать 2. STP - число - шаг ротации. Если значение не задано, то STP=0. Значение STP задаётся только в JavaScript коде. В итоговом HTML-коде STP должно быть переменной в начале JavaScript с комментарием, где её менять * Символы 's' и 'x' относятся к обрабатываемым символам языка Oflameron, но им пока не назначены функции и они не участвуют в ротации, использовать в программе только 18 символов. Символы 's' и 'x' зарезервированы. Элементы интерфейса: Заголовок: "Интерпретатор языка Oflameron ver 1.50 (с ротацией)" <=== Поле №1 (textarea): "Простое число (ключ для XOR)" Начальное значение (строка цифр): 176684706477838432958329750074291851582748389687561895812160620129261977163358586401104946332014022802424840484736440263640058869150064213123847594034139965365510006253457917812163931669483321 Подпись: "Введите ключ как строку цифр" Поле №2 (textarea): "Исходный код программы Oflameron". Содержит весь введённый пользователем код, включая необрабатываемые (балластные) символы. Поле №3 (textarea): "Код программы Oflameron (clear)". Код программы, очищенный от необрабатываемых символов (не входящих в список a, b, c, d, e, p, t, v, w, h, q, l, k, f, g, i, m, n). Меняется каждый раз, когда вносятся изменения в Поле №2 Поле №4 (textarea, readonly): "Результат / Шифротекст" в текстовом виде после нажатия кнопки RUN Поле №5 (textarea, readonly): "Результат / Шифротекст" в виде сплошного десятичного кода символов (например, вместо символов UVW - десятичный код 858687) без пробелов Кнопки: RUN (запуск интерпретатора) XOR (операция с ключом) "Показать таблицу ротации" (для отладки). Формат вывода - текущее значение массива SYMBOL_ORDER. Например - SYMBOL_ORDER= ['a','b','c','d','e','p','t','v','w','h','q','l','k','f','g','i','m','n']. Просто в div сообщений писать строку (заменять содержимое div). Блок для сообщений (div) Блок информации о ротации: "STP (шаг ротации по списку a, b, c, d, e, p, t, v, w, h, q, l, k, f, g, i, m, n) = 1 (измените в JavaScript коде веб страницы)" Интерпретатор 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 // Исходный порядок символов Переменная (массив) SYMBOL_ORDER = ['a','b','c','d','e','p','t','v','w','h','q','l','k','f','g','i','m','n']; При этом - первые 9 символов (из диапазона 0-17) в переменной SYMBOL_ORDER - это символы констант (a, b, c, d, e, p, t, v, w) 9-12 символы - переменные (h, q, l, k) 13-17 символы - операторы (f, g, i, m, n) Т.е. если рассматривать SYMBOL_ORDER как массив, то перед началом выполнения кода программы каждой позиции в массиве назначается своя функциональность (которые описаны далее): SYMBOL_ORDER(0) = 'a' - константа SYMBOL_ORDER(1) = 'b' - константа SYMBOL_ORDER(2) = 'c' - константа SYMBOL_ORDER(3) = 'd' - константа SYMBOL_ORDER(4) = 'e' - константа SYMBOL_ORDER(5) = 'p' - константа SYMBOL_ORDER(6) = 't' - константа SYMBOL_ORDER(7) = 'v' - константа SYMBOL_ORDER(8) = 'w' - константа SYMBOL_ORDER(9) = 'h' - переменная SYMBOL_ORDER(10) = 'q' - переменная SYMBOL_ORDER(11) = 'l' - переменная SYMBOL_ORDER(12) = 'k' - переменная SYMBOL_ORDER(13) = 'f' - оператор SYMBOL_ORDER(14) = 'g' - оператор SYMBOL_ORDER(15) = 'i' - оператор SYMBOL_ORDER(16) = 'm' - оператор SYMBOL_ORDER(17) = 'n' - оператор При ротации значения элементов массива SYMBOL_ORDER (буквы) будут меняться (сдвигаться), но функциональность постоянно назначена в соответствии с индексом элемента в массиве. Ротация символов: Принцип: Циклический сдвиг функций символов вправо по списку на STP позиций. Сдвиг выполняется ПООПЕРАТОРНО. Т.е. для примера fbcgde - fbc выполняется как умножение b на c. И только потом выполняется ротация - сдвиг функциональности. Сдвиг к следующей функциональности происходит только при переходе к выполнению следующего оператора! При выполнении кода программы сдвиг будет выполнен столько раз, сколько операторов встретится Интерпретатору. Числовые значения констант всегда соответствуют индексам 0-8 в массиве SYMBOL_ORDER, но сами символы в этих индексах меняются при ротации. Когда выполнять ротацию: Ротация выполняется после (после!) выполнения КАЖДОГО оператора (f,g,i,l,m,n). Т.е. сначала выполнить оператор в текущем функционале. Затем выполнить сдвиг вправо по коду программы на 2 или 3 символа (в зависимости от длины оператора) - перейти к следующему оператору, затем выполнить ротацию (сдвиг функциональности), определить новую функциональность оператора и начать выполнять этот оператор. Механика ротации (примеры) для STP=1: a получает функцию b (значение 1) b получает функцию c (значение 3) ... n получает функцию a (значение 0) Т.е. если рассматривать SYMBOL_ORDER как массив, то после первого сдвига станет: SYMBOL_ORDER(0) = 'b' - константа SYMBOL_ORDER(1) = 'c' - константа SYMBOL_ORDER(2) = 'd' - константа SYMBOL_ORDER(3) = 'e' - константа SYMBOL_ORDER(4) = 'p' - константа SYMBOL_ORDER(5) = 't' - константа SYMBOL_ORDER(6) = 'v' - константа SYMBOL_ORDER(7) = 'w' - константа SYMBOL_ORDER(8) = 'h' - константа SYMBOL_ORDER(9) = 'q' - переменная SYMBOL_ORDER(10) = 'l' - переменная SYMBOL_ORDER(11) = 'k' - переменная SYMBOL_ORDER(12) = 'f' - переменная SYMBOL_ORDER(13) = 'g' - оператор SYMBOL_ORDER(14) = 'i' - оператор SYMBOL_ORDER(15) = 'm' - оператор SYMBOL_ORDER(16) = 'n' - оператор SYMBOL_ORDER(17) = 'a' - оператор Сдвиг функциональности выполняется ТОЛЬКО после выполнения каждого оператора. Т.е. запись кода fcdgbemc... надо рассматривать как fcd(сдвиг)gbe(сдвиг)mc(сдвиг)... Столбцы таблицы показывают, как меняется содержимое SYMBOL_ORDER для каждого сдвига при STR=1 Сдвиг на 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ------------------------------------------------------------------------------------------------------------ Executable function --------------------------------------------------------------------------------------------------------- Константа a a b c d e p t v w h q l k f g i m n Константа b b c d e p t v w h q l k f g i m n a Константа c c d e p t v w h q l k f g i m n a b Константа d d e p t v w h q l k f g i m n a b c Константа e e p t v w h q l k f g i m n a b c d Константа p p t v w h q l k f g i m n a b c d e Константа t t v w h q l k f g i m n a b c d e p Константа v v w h q l k f g i m n a b c d e p t Константа w w h q l k f g i m n a b c d e p t v Переменная h h q l k f g i m n a b c d e p t v w Переменная q q l k f g i m n a b c d e p t v w h Переменная l l k f g i m n a b c d e p t v w h q Переменная k k f g i m n a b c d e p t v w h q l Оператор f f g i m n a b c d e p t v w h q l k Оператор g g i m n a b c d e p t v w h q l k f Оператор i i m n a b c d e p t v w h q l k f g Оператор m m n a b c d e p t v w h q l k f g i Оператор n n a b c d e p t v w h q l k f g i m Ошибки: Если после ротации оператор получает несоответствующую арность - операция пропускается. Например: 1. Если оператор f ожидает 2 параметра, а после ротации он стал l (1 параметр), то используется только один (первый параметр), а второй параметр, оставшийся от f пропускаем, т.к. для l он лишний (ошибочный). Т.к. выполняется уже новый оператор l, то k+2. Но там остался еще один параметр от f, он будет рассматриваться как ошибка и должен быть пропущен. Мы должны обработать этот символ как ошибку (k+1) и перейти дальше. 2. Если оператор l (1 параметр) стал f (2 параметра), а в коде после него только один символ, то получившийся оператор f оказывается с неверным форматом (не хватает ещё одного параметра) и должен быть просто пропущен. Период: При STP=1 период ротации = 18 операторов Нормализация чисел: javascript function normalize(num) { while (num > 126) num -= 126; if (num < 0) num = Math.abs(num); return Math.floor(num); } Применяется после КАЖДОЙ математической операции к результату. Результат должен быть положительным и в диапазоне 0-126 Допустимые операнды: Константы: a, b, c, d, e, p, t, v, w Переменные: h, q, l k используется ТОЛЬКО как указатель положения в строке кода программы Операторы (до ротации): fXY - умножение: h = normalize(X * Y) (k+3) - размер оператора = 3 символа gXY - сложение: h = normalize(X + Y) (k+3) - размер оператора = 3 символа iXY - вычитание: h = normalize(Math.abs(X - Y)) (k+3) - размер оператора = 3 символа lX - прочитать в l ASCII-код символа из позиции k + normalize(X) (k+2) - размер оператора = 2 символа. Читается именно символ (именно символ, буква) из строки "очищенной" от балластных символов программы (т.е. константа, переменная, оператор). Читается такой символ из указанной позиции строки кода, какой там есть на момент исполнения оператора lX. Мы читаем ASCII-код символа (буквы). Если индекс получается вне диапазона, то только - ошибка (пропуск оператора, k+2). При этом переменная l остаётся с предыдущим значением mX - вывести символ с кодом normalize(X) в поле №4 (k+2) - размер оператора = 2 символа. Вывод накапливается, то есть каждое mX добавляет символ к строке результата. Непечатаемые символы заменять на пробел. Диапазон "печатаемых" символов: 32-126 nX - заменить символ в позиции k + normalize(X) на символ с кодом normalize(h) (k+2) - размер оператора = 2 символа. Символ заменяется в "очищенном" коде программы. Если после замены там оказался символ, который не входит в SYMBOL_ORDER (например, цифра), то такая ситуация обрабатывается как ошибка и пропускается. Мы заменяем символ на ASCII-символ с этим кодом. Если это приведёт к ошибке исполнения дальнейшего кода, то будем тогда обрабатывать ошибку. Пользователь может преднамеренно создавать ошибку в программе. Оператор nX - если индекс вне диапазона, то ошибка (пропуск), k+2. В операторе nX - (X - параметр оператора), например na, ne или nk. Если X оказался не константой и не переменной, тогда это ошибка формата оператора и тоже k+2, но ничего не делаем. Если в результате записи символа в код программы он окажется не входящим в список SYMBOL_ORDER, то такой символ пропускается так же, как "балластный". Если для оператора nX - индекс вне диапазона, то ничего не делать и k всё равно +2 (это единственный вариант, когда по ошибке k всё равно +2). Т.е. просто прпускаем оператор nX Оператор называется nX (где X — любой допустимый операнд/параметр: константа/переменная) Общие правила: Исполнение строго слева направо k (указатель в строке программы) только увеличивается. Движение по коду: f,g,i: k+3 l,m,n: k+2 (где l - оператор lX с операндом X, m - оператор mX с операндом X, n - оператор nX с операндом X, ) Ошибка/неизвестный символ: k+1 (просто сдвинуться вправо на одну позицию в строке программы) Ошибка: если ожидается операнд, но символ недопустим > k+1 Неизвестные символы: пропускаются (k+1) Самомодификация кода программы: через оператор nX Сброс при RUN: обнулить h,q,l,k, очистить поля №4 и №5, сбросить ротацию к началу. Поля №2 и №3 остаются без изменений (такими же, как ввёл пользователь). Для декодирования по-прежнему используется программа из поля №3 (очищенная). Если пользователь изменил поле №2 после RUN, но не нажал RUN снова - поле №3 автоматически обновится (по слушателю input) и перезапишет код программы. Защита от циклов в программе: максимум 100000 шагов. 100000 шагов — это ограничение на количество выполненных операций. Операция — это успешно выполненный оператор (f,g,i,l,m,n). Механика ротации в деталях: Начальное состояние: символы имеют исходные функции После выполнения каждого оператора: Все символы сдвигаются вправо на STP позиций в списке Новые функции применяются к следующему оператору Пример при STP=1: text Исходно: a=0, b=1, c=3, d=5, ..., f=умножение, g=сложение После первого оператора: a=1, b=3, c=5, ..., f=сложение, g=вычитание Операция XOR: Выполняется: между ключом (поле №1) и текстом (поле №4) Процесс: Взять N = min(длина_ключа, длина_текста) Для i=0..N-1: результат[i] = String.fromCharCode(код_ключа[i] ^ код_текста[i]) Заменить содержимое поля №4 на результат Обратимость: XOR(XOR(текст, ключ), ключ) = текст Функция "Показать таблицу ротации": Показывает текущее состояние ротации. Формат вывода - текущее значение массива SYMBOL_ORDER. Например - SYMBOL_ORDER= ['a','b','c','d','e','p','t','v','w','h','q','l','k','f','g','i','m','n'] Примеры выполнения с ротацией: Пример 1 (STP=1): Исходный код: fbcgde... Шаг 1: fbc выполняется как умножение (b*c = 1*3 = 3, h=3) Шаг 2: Ротация: функциональность символов сдвигается вправо на 1 Т.е. вместо SYMBOL_ORDER = ['a','b','c','d','e','p','t','v','w','h','q','l','k','f','g','i','m','n'] надо рассматривать SYMBOL_ORDER = ['b','c','d','e','p','t','v','w','h','q','l','k','f','g','i','m','n','a']; Шаг 3: gde теперь выполняется как вычитание (g получил функцию i). Длина оператора 3 символа. Шаг 4: Вычисление: |d - e| = |5-7| = 2, h=2 Шаг 5: Ротация: снова функциональность символов сдвигается вправо на 1 И вместо SYMBOL_ORDER = ['b','c','d','e','p','t','v','w','h','q','l','k','f','g','i','m','n','a'] надо рассматривать SYMBOL_ORDER = ['c','d','e','p','t','v','w','h','q','l','k','f','g','i','m','n','a','b']; Пример 2 (STP=2): Исходный код: fbcfbc... Шаг 1: fbc выполняется как умножение (1*3=3, h=3) Шаг 2: Ротация: сдвиг функциональности на 2 позиции Т.е. вместо SYMBOL_ORDER = ['a','b','c','d','e','p','t','v','w','h','q','l','k','f','g','i','m','n'] надо рассматривать SYMBOL_ORDER = ['c','d','e','p','t','v','w','h','q','l','k','f','g','i','m','n','a','b'] Шаг 3: Теперь: f ->i(вычитание). Далее, смотрим параметры для вычитания. Формат iXY. Длина - 3 символа. символ b теперь не константа, а выполняет функцию оператора n - это оператор редактирования кода. В формате f не может быть параметром другой оператор. Ошибка. Пропускаем k+3 Требования к реализации: Чистый HTML/CSS/JavaScript без внешних библиотек Адаптивная вёрстка для мобильных устройств Кнопка RUN: запускает интерпретатор с кодом из поля №2, сбрасывая ротацию Кнопка XOR: выполняет операцию XOR как описано выше Кнопка "Показать таблицу ротации": показывает текущее состояние Реализация ротации: Массив функций для каждого символа Функция rotateSymbols() вызывается после каждого оператора Таблица преобразования обновляется динамически Сообщения: в отдельном div показывать информацию о ротации. Технические детали реализации ротации: Как реализовывать: Через currentSymbolOrder (массив) + фиксированные типы по индексам javascript // Исходный порядок символов Переменная SYMBOL_ORDER = ['a','b','c','d','e','p','t','v','w','h','q','l','k','f','g','i','m','n']; // Текущее отображение символов на функции // Функция ротации 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/p3uvf82pb3wunr8uol https://t.me/llmsource/