Интерпретатор позволяет перейти к технологии шифрования на основе конечных автоматов. Один из вариантов - генерируется столько интерпретаторов, сколько букв в исходном тексте. Каждая буква превращается в программу на своем языке. Сами программы выглядят как текст.
И это еще только 1-я часть...
Тема интересная
И это еще только 1-я часть...
Тема интересная
Новый вариант запроса для интерпретатора эзотерического языка.
Цель проекта:
Создать веб-приложение на HTML и JavaScript, обеспечивающее интерпретацию специализированного крипто-языка программирования посредством набора базовых операторов и простейших управляющих конструкций.
Основные компоненты приложения:
Два текстовых поля (<textarea>):
Первое поле предназначено для ввода программного кода на эзотерическом языке.
Второе поле предназначено для вывода результатов выполнения программы.
Кнопка RUN, активирующая интерпретацию введённой строки кода.
Характеристики интерпретатора:
Базовая структура:
Язык включает только прописные латинские буквы от a до h, где:
Буквы a, b, c, d, e представляют собой целые константы:
a = 0, b = 1, c = 3, d = 5, e = 7.
Буквы h, q, l, k выполняют роль числовых переменных, предварительно установленных в значение 0.
Принцип работы:
Программа исполняется последовательно слева направо, обходя строку посимвольно.
Индексирующая переменная k монотонно возрастает с каждым действием и не уменьшается.
Основные операторы:
Многосимвольные операторы:
Умножение: fXY — принимает последующие два символа и помещает произведение в переменную h, после чего добавляет к индексу k значение 3.
Сложение: gXY — аналогичным образом складывает значения двух символов и записывает результат в переменную h, прибавляя к k 3.
Модульное вычитание: iXY — сохраняет в переменную h абсолютную разницу между двумя последующими символами, после чего увеличивает k на 3.
Здесь X и Y — это константы или переменные, обозначаемые соответствующими буквами алфавита.
Односимвольные операторы:
Запись символа: lX — считывает символ из строки на позиции k + X, сохраняя его в переменную l, после чего прибавляет к k значение 2.
Вывод символа: mX — выводит символ с кодом X в область вывода, если он соответствует печатаемым символам ASCII (код от 32 до 126), иначе ничего не выводит и увеличивает k на 2.
Замена символа: nq — замещает символ в позиции k + q на символ с кодом, соответствующим текущему значению переменной h, затем добавляет к k значение 2. Если новая позиция выходит за пределы строки, замена пропускается.
Механизм обработки ошибок:
Ошибки специально оставлены без автоматической обработки. Некорректные последовательности символов (например, неизвестные операторы или отсутствие аргументов) учитываются как случайные события, ведущие к повышению индекса k на 1 и выполнению следующей команды.
Реализация памяти:
Вся необходимая память хранится локально в рамках выполняемой сессии. Внутренняя логика построена так, чтобы сохранять и получать доступ к данным через переменные и индексы без ограничений.
Максимальная длина строки:
Входная строка не ограничивается искусственно. Разработчики могут использовать собственные методы эмпирического подбора оптимальной длины строки.
Таким образом, итоговая спецификация охватывает всю необходимую функциональность и ориентирована на точное следование заданным вами условиям.
Цель проекта:
Создать веб-приложение на HTML и JavaScript, обеспечивающее интерпретацию специализированного крипто-языка программирования посредством набора базовых операторов и простейших управляющих конструкций.
Основные компоненты приложения:
Два текстовых поля (<textarea>):
Первое поле предназначено для ввода программного кода на эзотерическом языке.
Второе поле предназначено для вывода результатов выполнения программы.
Кнопка RUN, активирующая интерпретацию введённой строки кода.
Характеристики интерпретатора:
Базовая структура:
Язык включает только прописные латинские буквы от a до h, где:
Буквы a, b, c, d, e представляют собой целые константы:
a = 0, b = 1, c = 3, d = 5, e = 7.
Буквы h, q, l, k выполняют роль числовых переменных, предварительно установленных в значение 0.
Принцип работы:
Программа исполняется последовательно слева направо, обходя строку посимвольно.
Индексирующая переменная k монотонно возрастает с каждым действием и не уменьшается.
Основные операторы:
Многосимвольные операторы:
Умножение: fXY — принимает последующие два символа и помещает произведение в переменную h, после чего добавляет к индексу k значение 3.
Сложение: gXY — аналогичным образом складывает значения двух символов и записывает результат в переменную h, прибавляя к k 3.
Модульное вычитание: iXY — сохраняет в переменную h абсолютную разницу между двумя последующими символами, после чего увеличивает k на 3.
Здесь X и Y — это константы или переменные, обозначаемые соответствующими буквами алфавита.
Односимвольные операторы:
Запись символа: lX — считывает символ из строки на позиции k + X, сохраняя его в переменную l, после чего прибавляет к k значение 2.
Вывод символа: mX — выводит символ с кодом X в область вывода, если он соответствует печатаемым символам ASCII (код от 32 до 126), иначе ничего не выводит и увеличивает k на 2.
Замена символа: nq — замещает символ в позиции k + q на символ с кодом, соответствующим текущему значению переменной h, затем добавляет к k значение 2. Если новая позиция выходит за пределы строки, замена пропускается.
Механизм обработки ошибок:
Ошибки специально оставлены без автоматической обработки. Некорректные последовательности символов (например, неизвестные операторы или отсутствие аргументов) учитываются как случайные события, ведущие к повышению индекса k на 1 и выполнению следующей команды.
Реализация памяти:
Вся необходимая память хранится локально в рамках выполняемой сессии. Внутренняя логика построена так, чтобы сохранять и получать доступ к данным через переменные и индексы без ограничений.
Максимальная длина строки:
Входная строка не ограничивается искусственно. Разработчики могут использовать собственные методы эмпирического подбора оптимальной длины строки.
Таким образом, итоговая спецификация охватывает всю необходимую функциональность и ориентирована на точное следование заданным вами условиям.
oflameron_translator.htm
6.2 KB
Код интерпретатора языка Oflameron в виде HTML веб страницы.
Краткое описание реализации:
Переменные: h, q, l, k - числовые, начальное значение 0
Константы: a=0, b=1, c=3, d=5, e=7
Нормализация чисел:
>127 → повторно вычитаем 127
<0 → берём модуль
Операторы:
fXY, gXY, iXY - арифметика, k+3
lX - запись кода символа в l, k+2
mX - вывод символа (32-126), k+2
nq - замена символа, k+2
Ошибки: неверные операнды → k+1
Самомодификация: массив символов позволяет изменять код
Защита: лимит 100000 шагов от бесконечных циклов
Код готов к использованию. Можно вставлять программы вида fbc, ghc, mh и т.д.
Краткое описание реализации:
Переменные: h, q, l, k - числовые, начальное значение 0
Константы: a=0, b=1, c=3, d=5, e=7
Нормализация чисел:
>127 → повторно вычитаем 127
<0 → берём модуль
Операторы:
fXY, gXY, iXY - арифметика, k+3
lX - запись кода символа в l, k+2
mX - вывод символа (32-126), k+2
nq - замена символа, k+2
Ошибки: неверные операнды → k+1
Самомодификация: массив символов позволяет изменять код
Защита: лимит 100000 шагов от бесконечных циклов
Код готов к использованию. Можно вставлять программы вида fbc, ghc, mh и т.д.
image.png
27.4 KB
Интерпретатор работает. Я поменял кодовую страницу, чтобы кириллица на веб странице показывалась нормально.
Если результат работы кода (строки) в первом окне = изображаемому символу, то результат вы увидите.
В идеале, написанная вами программа в верхнем окне должна сгенерировать в нижнем окне "расшифрованный" из программы текст
Если результат работы кода (строки) в первом окне = изображаемому символу, то результат вы увидите.
В идеале, написанная вами программа в верхнем окне должна сгенерировать в нижнем окне "расшифрованный" из программы текст
ИИ написал первый код программы на эзотерическом языке Oflameron.
Текст:
fcdfhdghdihbmhghdghdghdghdghcmhghcghcmhihdihdihbmhghcghcghcghcmhihdihcmhgheghdghbmhihcmhihbmh
Самомодификация кода пока не используется, хотя ИИ вовсю предлагает использовать
Текст:
fcdfhdghdihbmhghdghdghdghdghcmhghcghcmhihdihdihbmhghcghcghcghcmhihdihcmhgheghdghbmhihcmhihbmh
Самомодификация кода пока не используется, хотя ИИ вовсю предлагает использовать
Oflameron_CRYPTO_Language_Deepseek_Prompt.txt
2.9 KB
Несколько уточненный текст запроса. В этом варианте интерпретатора больше возможностей. Должен получаться более короткий код программы
https://chat.deepseek.com/share/w5pzla3xtvoovi98ow
https://chat.deepseek.com/share/w5pzla3xtvoovi98ow
Разработаем ИИ запрос (следующий вариант) для генерирования HTML+JavaScript кода интерпретатора криптографического языка программирования Oflameron.
Язык должен допускать переписывание собственного кода (обфускацию) в процессе исполнения.
Пользователь должен иметь возможность легко модернизировать алгоритм языка Oflameron просто отредактировав ИИ запрос.
Язык должен позволять писать листинги программ на других языках. Например, на JavaScript
Первые версии языка Oflameron имеют ограниченный функционал. В следующих версиях будут добавлены: полное само-редактирование, мимикрия кода, битовые операции.
Да, можно сказать, что JavaScript всё это позволяет. Но в Oflameron вы можете сами задавать правила!
Когда в псевдослучайном числе (тексте) каждый символ сгенерирован не просто с другими исходными параметрами, а принципиально другим алгоритмом (языком), статистический анализ становится невозможным.
Постепенно мы перейдём от генерирования интерпретатора Oflameron, к генерированию принципиально разных языков Oflameron - столько, сколько букв в исходном тексте
Язык должен допускать переписывание собственного кода (обфускацию) в процессе исполнения.
Пользователь должен иметь возможность легко модернизировать алгоритм языка Oflameron просто отредактировав ИИ запрос.
Язык должен позволять писать листинги программ на других языках. Например, на JavaScript
Первые версии языка Oflameron имеют ограниченный функционал. В следующих версиях будут добавлены: полное само-редактирование, мимикрия кода, битовые операции.
Да, можно сказать, что JavaScript всё это позволяет. Но в Oflameron вы можете сами задавать правила!
Когда в псевдослучайном числе (тексте) каждый символ сгенерирован не просто с другими исходными параметрами, а принципиально другим алгоритмом (языком), статистический анализ становится невозможным.
Постепенно мы перейдём от генерирования интерпретатора Oflameron, к генерированию принципиально разных языков Oflameron - столько, сколько букв в исходном тексте
Идея использовать ансамбль из множества различных алгоритмов вместо одного (пусть и стойкого) в криптографии называется композитной или гибридной криптосистемой. В контексте генерации ПСЧ это можно классифицировать как динамический ансамбль генераторов (PRNG Ensemble).
Чтобы ИИ сгенерировал для вас «сотню» таких алгоритмов, запрос должен быть структурирован так, чтобы обеспечить математическое разнообразие и программную совместимость. Формулировка задачи для ИИ
Чтобы получить качественный результат, разбейте запрос на три составляющих: классификацию, интерфейс и оркестрацию.
1. Классификация (Diversity) Попросите ИИ использовать разные математические семейства. Пример запроса: «Сгенерируй список из 100 математических функций для формирования ПСЧ, разделенных по категориям:Теория чисел: (Линейные конгруэнтные, алгоритмы на базе дискретного логарифма, BBS, алгоритм Ингама).Хаотические системы: (Логистическое отображение, странные аттракторы Лоренца, отображение «кот Арнольда», отображение Хенона).Клеточные автоматы: (Rule 30, Rule 90, Rule 110).Битовые манипуляции: (LFSR, NLFSR, Xorshift, PCG).Криптографические хеш-функции и шифры в режиме счетчика: (Salsa20, ChaCha, AES-CTR).»
2. Унификация (Standard Interface) Чтобы алгоритмы можно было чередовать, они должны иметь одинаковую «форму». «Для каждого алгоритма напиши реализацию на [язык, например, Python/C++], которая соответствует интерфейсу: next_state(current_state) -> (new_state, output_symbol). Каждый алгоритм должен принимать параметры (ключи/семена) и выдавать нормализованное число в диапазоне \([0,1]\) или байт \([0,255]\).»
3. Мета-алгоритм (Orchestration) Это самая важная часть — то, как они сменяют друг друга. «Предложи механизм выбора алгоритма для каждого следующего шага. Механизм должен зависеть от секретного ключа и, возможно, от результата работы предыдущего алгоритма (цепочка зависимостей), чтобы предотвратить статистический анализ разделения потоков.» Почему это эффективно (Криптоанализ 2026) Ваш подход реализует принцип «защиты в глубину» (Defense in Depth):
Разрыв паттернов: Статистические тесты (типа NIST или Dieharder) ищут закономерности конкретной математической структуры. Если структура меняется каждый байт, «отпечаток» алгоритма размывается.Сложность для ИИ-взломщиков: Современные нейросети-криптоанализаторы обучаются предсказывать следующую итерацию конкретной функции. Если функций сотни и порядок их вызова неизвестен, пространство поиска для нейросети становится экспоненциальным.
Математическая заметка
Для обеспечения максимальной стойкости, выбор следующего алгоритма \(A_{i}\) из набора \(\mathbb{A}\) должен определяться функцией:\(\text{Next\_Alg}=F(K,S_{n})\quad (\mod |\mathbb{A}|)\)где \(K\) — секретный мастер-ключ, а \(S_{n}\) — текущее состояние энтропии системы.
Осторожность:
При комбинировании убедитесь, что «слабые» алгоритмы (как вихрь Мерсенна или Rule-30) не вносят линейных зависимостей.
Лучше использовать их как дополнительные источники «шума», смешивая их выход с криптостойкими функциями через операцию \(XOR\).
Чтобы ИИ сгенерировал для вас «сотню» таких алгоритмов, запрос должен быть структурирован так, чтобы обеспечить математическое разнообразие и программную совместимость. Формулировка задачи для ИИ
Чтобы получить качественный результат, разбейте запрос на три составляющих: классификацию, интерфейс и оркестрацию.
1. Классификация (Diversity) Попросите ИИ использовать разные математические семейства. Пример запроса: «Сгенерируй список из 100 математических функций для формирования ПСЧ, разделенных по категориям:Теория чисел: (Линейные конгруэнтные, алгоритмы на базе дискретного логарифма, BBS, алгоритм Ингама).Хаотические системы: (Логистическое отображение, странные аттракторы Лоренца, отображение «кот Арнольда», отображение Хенона).Клеточные автоматы: (Rule 30, Rule 90, Rule 110).Битовые манипуляции: (LFSR, NLFSR, Xorshift, PCG).Криптографические хеш-функции и шифры в режиме счетчика: (Salsa20, ChaCha, AES-CTR).»
2. Унификация (Standard Interface) Чтобы алгоритмы можно было чередовать, они должны иметь одинаковую «форму». «Для каждого алгоритма напиши реализацию на [язык, например, Python/C++], которая соответствует интерфейсу: next_state(current_state) -> (new_state, output_symbol). Каждый алгоритм должен принимать параметры (ключи/семена) и выдавать нормализованное число в диапазоне \([0,1]\) или байт \([0,255]\).»
3. Мета-алгоритм (Orchestration) Это самая важная часть — то, как они сменяют друг друга. «Предложи механизм выбора алгоритма для каждого следующего шага. Механизм должен зависеть от секретного ключа и, возможно, от результата работы предыдущего алгоритма (цепочка зависимостей), чтобы предотвратить статистический анализ разделения потоков.» Почему это эффективно (Криптоанализ 2026) Ваш подход реализует принцип «защиты в глубину» (Defense in Depth):
Разрыв паттернов: Статистические тесты (типа NIST или Dieharder) ищут закономерности конкретной математической структуры. Если структура меняется каждый байт, «отпечаток» алгоритма размывается.Сложность для ИИ-взломщиков: Современные нейросети-криптоанализаторы обучаются предсказывать следующую итерацию конкретной функции. Если функций сотни и порядок их вызова неизвестен, пространство поиска для нейросети становится экспоненциальным.
Математическая заметка
Для обеспечения максимальной стойкости, выбор следующего алгоритма \(A_{i}\) из набора \(\mathbb{A}\) должен определяться функцией:\(\text{Next\_Alg}=F(K,S_{n})\quad (\mod |\mathbb{A}|)\)где \(K\) — секретный мастер-ключ, а \(S_{n}\) — текущее состояние энтропии системы.
Осторожность:
При комбинировании убедитесь, что «слабые» алгоритмы (как вихрь Мерсенна или Rule-30) не вносят линейных зависимостей.
Лучше использовать их как дополнительные источники «шума», смешивая их выход с криптостойкими функциями через операцию \(XOR\).
Запрос-промпт для ИИ (для генерирования алгоритмов):
«Действуй как эксперт по криптографии. Сгенерируй библиотеку из 50 различных функций генерации псевдослучайных чисел (PRNG) на языке [Python/C++].
Каждая функция должна:
Использовать уникальный математический подход (хаос, тригонометрия, битовые сдвиги, простые числа).
Принимать state и возвращать (new_state, random_byte).
Быть компактной и не использовать внешние библиотеки.
В конце напиши класс-оркестратор, который выбирает одну из этих функций на основе мастер-ключа, используя CSPRNG для переключения индексов. Обеспечь защиту от утечки состояния через побочные каналы».
«Действуй как эксперт по криптографии. Сгенерируй библиотеку из 50 различных функций генерации псевдослучайных чисел (PRNG) на языке [Python/C++].
Каждая функция должна:
Использовать уникальный математический подход (хаос, тригонометрия, битовые сдвиги, простые числа).
Принимать state и возвращать (new_state, random_byte).
Быть компактной и не использовать внешние библиотеки.
В конце напиши класс-оркестратор, который выбирает одну из этих функций на основе мастер-ключа, используя CSPRNG для переключения индексов. Обеспечь защиту от утечки состояния через побочные каналы».
Помнится был такой язык программирования Эль-76
Там всё писалось на Русском...
Теперь, с ИИ можно так же писать на Русском. Например, циклы
Создай текстовую переменную intext. В переменную помести текст "interpreter of the Oflameron"
Создай переменную DL, подсчитай количество символов в строке intex и помести значение а переменную DL/.
Создай числовую переменную NL=0, которую будем использовать как указатель на позицию символа в строке intex.
Далее надо многократно выполнить блок <NNT> для NL начиная с NL=0 и до тех пор, пока NL<DL
<начало NNT>
Надо выбрать символ из строки intex с позицией NL и выбрать следующий символ из строки intex с позицией NL+1
Между кодом символа в позиции NL и кодом символа в позиции NL+1 выполнить битовую операцию XOR. Результат записать в позицию NL+1 строки intex
Увеличить значение указателя NL на 1 (сдвинуть вправо).
Если значение NL стало больше или равно значению DL (длина строки intex), то выйти из блока <NNT>
<\конец NNT>
Написать на экран строку символов из переменной intex
Вообще, пока язык Oflameron "ни разу не криптографический". Пока
Там всё писалось на Русском...
Теперь, с ИИ можно так же писать на Русском. Например, циклы
Создай текстовую переменную intext. В переменную помести текст "interpreter of the Oflameron"
Создай переменную DL, подсчитай количество символов в строке intex и помести значение а переменную DL/.
Создай числовую переменную NL=0, которую будем использовать как указатель на позицию символа в строке intex.
Далее надо многократно выполнить блок <NNT> для NL начиная с NL=0 и до тех пор, пока NL<DL
<начало NNT>
Надо выбрать символ из строки intex с позицией NL и выбрать следующий символ из строки intex с позицией NL+1
Между кодом символа в позиции NL и кодом символа в позиции NL+1 выполнить битовую операцию XOR. Результат записать в позицию NL+1 строки intex
Увеличить значение указателя NL на 1 (сдвинуть вправо).
Если значение NL стало больше или равно значению DL (длина строки intex), то выйти из блока <NNT>
<\конец NNT>
Написать на экран строку символов из переменной intex
Вообще, пока язык Oflameron "ни разу не криптографический". Пока
Запрос версии интерпретатора Oflameron 1.27 (чуть-чуть крипто)
Напиши HTML+JavaScript код веб-страницы, оптимизированной для просмотра на смартфоне с вертикальной ориентацией.
Элементы интерфейса:
Заголовок: "Интерпретатор языка Oflameron ver 1.25"
Поле №1 (textarea): "Простое число (ключ для XOR)"
Начальное значение: 176684706477838432958329750074291851582748389687561895812160620129261977163358586401104946332014022802424840484736440263640058869150064213123847594034139965365510006253457917812163931669483321
Подпись: "Введите ключ как строку цифр"
Поле №2 (textarea): "Код программы Oflameron"
Поле №3 (textarea, readonly): "Результат / Шифротекст"
Кнопки: RUN (запуск интерпретатора) и XOR (операция с ключом)
Блок для сообщений (div)
Интерпретатор Oflameron:
Переменные и константы:
h, q, l, k - числовые переменные, начальное значение 0 для всех
Константы: a=0, b=1, c=3, d=5, e=7, p=19, t=23, v=43, w=73
Нормализация чисел:
javascript
function normalize(num) {
while (num > 127) num -= 127;
if (num < 0) num = Math.abs(num);
return 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)
Только если код 32-126 (печатные символы)
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 шагов
Операция XOR:
Выполняется: между ключом (поле #1) и текстом (поле #3)
Процесс:
Взять N = min(длина_ключа, длина_текста)
Для i=0..N-1: результат[i] = String.fromCharCode(код_ключа[i] ^ код_текста[i])
Заменить содержимое поля #3 на результат
Обратимость: XOR(XOR(текст, ключ), ключ) = текст
Сообщения: в отдельном div показывать:
"Ключ короче текста" (если ключ короче)
"Текст короче ключа" (если текст короче)
"XOR выполнен успешно"
Требования к реализации:
Чистый HTML/CSS/JavaScript без внешних библиотек
Адаптивная вёрстка для мобильных устройств
Кнопка RUN: запускает интерпретатор с кодом из поля #2
Кнопка XOR: выполняет операцию XOR как описано выше
Состояние: не сохраняется между запусками
Простое число: используется только для XOR, проверка не требуется
Примеры:
fbc > h = normalize(1*3) = 3, k+3
ghc > h = normalize(h + 3), k+3
lp > l = ASCII_код_в_позиции(k+19), k+2
ml > вывести символ с кодом normalize(l), k+2
nq > code[k+normalize(q)] = символ_с_кодом normalize(h), k+2
Примечание:
Интерпретатор допускает неоднозначные ситуации - обязанность контроля возлагается на программиста.
Напиши HTML+JavaScript код веб-страницы, оптимизированной для просмотра на смартфоне с вертикальной ориентацией.
Элементы интерфейса:
Заголовок: "Интерпретатор языка Oflameron ver 1.25"
Поле №1 (textarea): "Простое число (ключ для XOR)"
Начальное значение: 176684706477838432958329750074291851582748389687561895812160620129261977163358586401104946332014022802424840484736440263640058869150064213123847594034139965365510006253457917812163931669483321
Подпись: "Введите ключ как строку цифр"
Поле №2 (textarea): "Код программы Oflameron"
Поле №3 (textarea, readonly): "Результат / Шифротекст"
Кнопки: RUN (запуск интерпретатора) и XOR (операция с ключом)
Блок для сообщений (div)
Интерпретатор Oflameron:
Переменные и константы:
h, q, l, k - числовые переменные, начальное значение 0 для всех
Константы: a=0, b=1, c=3, d=5, e=7, p=19, t=23, v=43, w=73
Нормализация чисел:
javascript
function normalize(num) {
while (num > 127) num -= 127;
if (num < 0) num = Math.abs(num);
return 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)
Только если код 32-126 (печатные символы)
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 шагов
Операция XOR:
Выполняется: между ключом (поле #1) и текстом (поле #3)
Процесс:
Взять N = min(длина_ключа, длина_текста)
Для i=0..N-1: результат[i] = String.fromCharCode(код_ключа[i] ^ код_текста[i])
Заменить содержимое поля #3 на результат
Обратимость: XOR(XOR(текст, ключ), ключ) = текст
Сообщения: в отдельном div показывать:
"Ключ короче текста" (если ключ короче)
"Текст короче ключа" (если текст короче)
"XOR выполнен успешно"
Требования к реализации:
Чистый HTML/CSS/JavaScript без внешних библиотек
Адаптивная вёрстка для мобильных устройств
Кнопка RUN: запускает интерпретатор с кодом из поля #2
Кнопка XOR: выполняет операцию XOR как описано выше
Состояние: не сохраняется между запусками
Простое число: используется только для XOR, проверка не требуется
Примеры:
fbc > h = normalize(1*3) = 3, k+3
ghc > h = normalize(h + 3), k+3
lp > l = ASCII_код_в_позиции(k+19), k+2
ml > вывести символ с кодом normalize(l), k+2
nq > code[k+normalize(q)] = символ_с_кодом normalize(h), k+2
Примечание:
Интерпретатор допускает неоднозначные ситуации - обязанность контроля возлагается на программиста.
Запрос к ИИ Google
Можешь подобрать и подставить символы вместо символа * (звёздочка) в следующей фразе (в кавычках) "An i*tpt*r f*r the Ofl*****n c*ypt*g**ph*ic pg**g lg**ge" так, чтобы получился осмысленный текст?
https://share.google/aimode/4JyPJGxMIRr9xbyay
Можешь подобрать и подставить символы вместо символа * (звёздочка) в следующей фразе (в кавычках) "An i*tpt*r f*r the Ofl*****n c*ypt*g**ph*ic pg**g lg**ge" так, чтобы получился осмысленный текст?
https://share.google/aimode/4JyPJGxMIRr9xbyay
Пример запроса для генерирования JavaScript кода, который реализует функцию такого "шифрования" текста.
Напиши функцию на JavaScript, которая принимает на вход строку и возвращает её в замаскированном виде, согласно следующим правилам:
В каждом слове должны оставаться открытыми только первая и последняя буквы.
Все буквы между ними должны заменяться на символ звёздочки *.
Если слово состоит из 1 или 2 букв, оно остается без изменений.
Знаки препинания и пробелы не должны затрагиваться.
Пример работы функции:
Вход: "An interpreter for the Oflameron cryptographic programming language"
Выход: "An i*tpt*r f*r the Ofl*****n c*ypt*g**ph*ic pgg lgge"
Код должен быть чистым, с использованием метода .replace() и регулярных выражений или метода .map()
Это, конечно, не шифр. Но хорошо меняет статистическое распределение букв
Если посмотреть запрос, то он НЕ ТОЧНЫЙ. Исходя из него не получить заданную форму фразы.
А вот уточненный запрос:
Напиши функцию на JavaScript, которая маскирует строку символом *, основываясь на графических особенностях букв.
Алгоритм обработки:
Функция принимает на вход строку.
В каждом слове первая и последняя буквы всегда остаются открытыми.
Внутри слова (между первой и последней буквами) буква остается открытой только если она входит в список "высоких" или "низких" символов, которые выступают за границы строки: q, p, t, l, h, f, d, y.
Все остальные буквы внутри слов должны быть заменены на *.
Регистр букв при проверке не важен (A и a обрабатываются одинаково), но в итоговой строке регистр оригинала должен сохраняться.
Слова из 1-2 букв не изменяются. Пробелы сохраняются.
Пример для проверки:
Вход: An interpreter for the Oflameron cryptographic programming language
Выход: An i*tpt*r f*r the Ofl*****n c*ypt*g**ph*ic pg**g lg**ge
Напиши компактный и чистый код.
Напиши функцию на JavaScript, которая принимает на вход строку и возвращает её в замаскированном виде, согласно следующим правилам:
В каждом слове должны оставаться открытыми только первая и последняя буквы.
Все буквы между ними должны заменяться на символ звёздочки *.
Если слово состоит из 1 или 2 букв, оно остается без изменений.
Знаки препинания и пробелы не должны затрагиваться.
Пример работы функции:
Вход: "An interpreter for the Oflameron cryptographic programming language"
Выход: "An i*tpt*r f*r the Ofl*****n c*ypt*g**ph*ic pgg lgge"
Код должен быть чистым, с использованием метода .replace() и регулярных выражений или метода .map()
Это, конечно, не шифр. Но хорошо меняет статистическое распределение букв
Если посмотреть запрос, то он НЕ ТОЧНЫЙ. Исходя из него не получить заданную форму фразы.
А вот уточненный запрос:
Напиши функцию на JavaScript, которая маскирует строку символом *, основываясь на графических особенностях букв.
Алгоритм обработки:
Функция принимает на вход строку.
В каждом слове первая и последняя буквы всегда остаются открытыми.
Внутри слова (между первой и последней буквами) буква остается открытой только если она входит в список "высоких" или "низких" символов, которые выступают за границы строки: q, p, t, l, h, f, d, y.
Все остальные буквы внутри слов должны быть заменены на *.
Регистр букв при проверке не важен (A и a обрабатываются одинаково), но в итоговой строке регистр оригинала должен сохраняться.
Слова из 1-2 букв не изменяются. Пробелы сохраняются.
Пример для проверки:
Вход: An interpreter for the Oflameron cryptographic programming language
Выход: An i*tpt*r f*r the Ofl*****n c*ypt*g**ph*ic pg**g lg**ge
Напиши компактный и чистый код.
Запрос:
Напиши HTML+JavaScript код веб страницы на которой размести два textarea и кнопку RUN
textarea №1 для ввода исходного текста
textarea №2 для вывода обработанного текста
JavaScript функция веб страницы должна маскировать строку символом *, основываясь на графических особенностях букв.
Алгоритм обработки:
Функция принимает на вход строку.
В каждом слове первая и последняя буквы всегда остаются открытыми (не маскируются).
Внутри слова (между первой и последней буквами) буква остается открытой только если она входит в список "высоких" или "низких" символов, которые выступают за границы строки: q, p, t, l, h, f, d, y.
Все остальные буквы внутри слов должны быть заменены на *.
Регистр букв при проверке не важен (A и a обрабатываются одинаково), но в итоговой строке регистр оригинала должен сохраняться.
Слова из 1-2 букв не изменяются. Пробелы сохраняются.
Пример для проверки:
Вход: An interpreter for the Oflameron cryptographic programming language
Выход: An i*tpt*r f*r the Ofl*****n c*ypt*g**ph*ic pgg lgge
Напиши компактный и чистый код.
Напиши HTML+JavaScript код веб страницы на которой размести два textarea и кнопку RUN
textarea №1 для ввода исходного текста
textarea №2 для вывода обработанного текста
JavaScript функция веб страницы должна маскировать строку символом *, основываясь на графических особенностях букв.
Алгоритм обработки:
Функция принимает на вход строку.
В каждом слове первая и последняя буквы всегда остаются открытыми (не маскируются).
Внутри слова (между первой и последней буквами) буква остается открытой только если она входит в список "высоких" или "низких" символов, которые выступают за границы строки: q, p, t, l, h, f, d, y.
Все остальные буквы внутри слов должны быть заменены на *.
Регистр букв при проверке не важен (A и a обрабатываются одинаково), но в итоговой строке регистр оригинала должен сохраняться.
Слова из 1-2 букв не изменяются. Пробелы сохраняются.
Пример для проверки:
Вход: An interpreter for the Oflameron cryptographic programming language
Выход: An i*tpt*r f*r the Ofl*****n c*ypt*g**ph*ic pgg lgge
Напиши компактный и чистый код.