Договнокодил очередное ненужно. А именно транслятор произвольных данных в код на brainfuck
который будучи исполненным выводит закодированные в нём данные. Текст, картинка, чво угодно.
Типа cat /dev/random | brainfucktor -o bigbrainfuck.b
Или устроить «матрицу» brainfucktor -i /dev/random
Так то это просто ради экспериментов, но может кому надо я фиг знаю, кодировщик в виде модуля Lua
конечно же и утилита командной строки покрывающая все его возможности, из возможностей просто игра генерирования разного brainfuck
кода из одних и тех же данных. Работает на любой версии Lua
от 5.1
до 5.4+
Код тормоз, такой же как и я. Для оптимизации его надо целиком переписывать и на Сях, но в этом нет смысла, это забава для небольших данных, хотя жрать может любые размеры, перегнать 10 мегабайт уже вечность, так что это просто для мелочи, если вдруг надо :D
Описание параметров
Usage: brainfucktor -i [FILE] -o [FILE]
brainfucktor -e 'encode this text to brainfuck'
cat file | brainfucktor - #read from pipe
brainfuck photo.png -o photo.bf
Encode input data to code in brainfuck language
Arguments:
-h --help This help information
- Input read from stdin
-i [FILE] Input filename for read
-o [FILE] Output filename for write
-e [TEXT] Input from command line argument
-cb [NUMBER] Cycle body size factor (>=1 default=2 )
-cs [NUMBER] Cycle split factor (>=1 default=16)
-cd [NUMBER] Cycle distance factor (>=1 default=64)
-vd [NUMBER] Value distance factor (>=1 default=8 )
-ch [NUMBER] Separate input by chunks size (>=1 default=1024 bytes)
-ml [NUMBER] Set max line size for split output ( >=1 default 80 bytes)
-sl Create single line output (this disabled -ml option)
-pc Print currect configuration for code generation
You can skip -i option and just set filename, but filename expect first
Пример вывода Hello World!
с немного разными настройками генерации
brainfucktor -e 'Hello World!'
+++++++++++[>+++++++<-]>-----.>+++++[<++++++>-]<-.+++++++..+++.>+++++++[>+++++<
-]>---.>++++++++++[<++++++>-]<-----.>+++++[<+++++>-]<-.+++.------.--------.>+++
+++[>++++++<-]>---.
brainfucktor -e 'Hello World!' -vd 50
+++++++++++[>+++++++<-]>-----.+++++++++++++++++++++++++++++.+++++++..+++.>+++++
++[>+++++<-]>---.>++++++++++[<++++++>-]<-----.++++++++++++++++++++++++.+++.----
--.--------.>++++++[>++++++<-]>---.
brainfucktor -e 'Hello World!' -cd 4
+++++++++++[>+++++++<-]>-----.>++++++++++++[>+++++++++<-]>-------.+++++++..+++.
>+++++++[>+++++<-]>---.>++++++++++[>+++++++++<-]>---.>+++++++++++++[>+++++++++<
-]>------.+++.------.--------.>++++++[>++++++<-]>---.
brainfucktor -e "Hello World!" -vd 128
+++++++++++[>+++++++<-]>-----.+++++++++++++++++++++++++++++.+++++++..+++.-------
------------------------------------------------------------------------.+++++++
++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++.+++.--
----.--------.------------------------------------------------------------------
-.
brainfucktor -e "Hello World!" -vd 1 -cs 8
>+++[<++++>-]<-[>+++++++<-]>-----.>+++++[<++++++>-]<-.>+++[<+++>-]<--..>+[<+++>-
]<.>+++++++[>+++++<-]>---.>++++++++++[<++++++>-]<-----.>+++++[<+++++>-]<-.>+[<++
+>-]<.>++[<--->-]<.>+++[<--->-]<+.>++++++[>++++++<-]>---.
Если использовать модуль напрямую, то он гибкий, может жрать таблицу, файл, строку
и выплёвывать возвратом строки от функции или писать в таблицу, файл, функцию.
Ввод обрабатывается поблочно, чанками его размер регулируется от 1
до 2^31
.
Сгенерированный код при исполнении жрёт ячеек памяти в максимуме N*2
где N
количество
закодированных байт, в минимуме жрёт всего 2
ячейки памяти, а дальше их переиспользует.
Для исполнения больших 50+
мегебайт блоков кода с циклами нужен интерпретатор brainfuck
без ограничений на память в 30000
ячеек. :D
Код жирный, прям как я, поэтому сюда не влезет несмотря на то что я влез.
Как мы недавно узнали нейроидиоты не могут в браинфук,
а это значит у нас есть средство борьбы со скайнетом, когда терминаторы придут и роботы заполонят эту плонету, мы будем общаться на этом простом и красивом языке :)
- использовать на свой страх и риск
Код и документация тут
Запускать можно прям из каталога, модуль подхватится который рядом лежит.
Локальные установка и удаление в $HOME/.local/
#Установка
make PREFIX=$HOME/.local install install-cli
#Удаление
make PREFIX=$HOME/.local uninstall uninstall-cli
Хоп и твой дистрибутив стал почти как Slackware
:D
Изначально было всего 15
строчек. Но я нахлобучил дублирующегося кода и лапши на if
ах до ~500
строк :D
Двойные комментарии ваще шедевр, надо было ещё и на китайском написать лол. Вроде всё.
Досвиданья.