Користувальницькькі налаштування

Налаштування сайту


Сайдбар

Розділи

Загальний опис
Історія змін
Рекомендації щодо оновлення
Плани на майбутнє
Відомі проблеми
Онлайн демо
Люди
Трохи про безпеку

FAQ



Редагувати сайдбар

brainfuck

Написання модулів на Brainfuck

Починаючи, з релізу Ubilling 0.8.5 Valhalla стало можливим використовувати код на Brainfuck у своїх модулях.

Навіщо?

Мова Brainfuck відома своїм мінімалізмом і крім того є Тьюринг-повною мовою. Наша команда розробників, своєю чергою, вважає, що витончений і водночас функціональний синтаксис Brainfuck якнайкраще підходить для розроблення прикладних модулів для Ubilling, і максимально відповідає його ідеології. Також ми не сприймаємо дискримінацію в будь-яких її проявах, і вважаємо, що всі мають право розробляти модулі для Ubilling, незалежно від статі, раси, релігії, статевої орієнтації та взаємовідносин з важкими наркотиками….

Трохи прикладів

Підключаємо інтерпретатор Brainfuck із відповідної бібліотеки.

require_once('api/vendor/bf/Brainfuck.php');
$bf=new dotzero\Brainfuck();

Просто виконання коду:

$code = '++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>++.>+.+++++++..+++.<<++.>+++++++++++++.+++++++++++++.>------.+++..---.+++++.<+++++.';
$bf->setCode($code);
show_window(__('Brainfuck code execution result'), $bf->run(true));

А якщо нам хочеться передати якісь вхідні дані? Все так само дуже просто:

$bf->setCode('>,[>,]<[<]>[.>]');
$bf->setInput('this is input data');
show_window('input test', $bf->run(true));

Але, можливо, ми хочемо інкапсулювати всередину PHP код, працювати з базою і робити інші круті речі, наприклад показати список користувачів у вигляді красивої таблички? Та скільки влізе:

$code='++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>++++++.>>---.+++++++++++..<---------.<----.>>++++++++++++++.-----------------'
        . '-------.---.----------.++++++++++++++++++++++++++++++.--------------.+++++++++++++.<++++++++++.>-------------.++++++++'
        . '+++++++.<------.>--------..<++++++++++++++++++.>++++++++.<++++++++++++++.>--.<++++++.------.>++++++++.<++++.>--------.'
        . '<-------------------------.>---.--------.++.+++++.+++++.<<++++++++.+.>-----------------.<---------.>>.-----------.++++'
        . '+++.++++++++.------------------------.++++++++++++++++++++++++.--------------.+++++.----------.+++++++++++.++++++++.<<+'
        . '+++++++.>>------------------------..<<.-.>>----------.++++++++++++++++++++++++++++++.--------------.+++++++++++++.+.<<'
        . '-------.>>-------.---.++++++++++.+.<<+++++++.++.+++.------------..>>+++.------------------.---.---.----------.++++++++'
        . '++++++++++++++++++++++.--------------.+++++++++++++.<++++++.>..-----------------.++++++++++++++++++++++++.<++++++++++++'
        . '++++++.>-----------------.+++++++.++++++++.<++++++++++++++++++.>-----.<<++++++++.----.>----.>------..<<+++++..+++++++++'
        . '+++++++++.';
$bf->setCode($code);
$bf->execute();

Ну і власне результат:

Пам'ятка із синтаксису

Весь синтаксис складається аж із 8-ми операторів:

  1. > Перейти до наступної комірки
  2. < Перейти до попередньої комірки
  3. + Збільшити значення в поточній комірці на 1
  4. - зменшити значення в поточній комірці на 1
  5. . надрукувати значення поточної комірки
  6. , Ввести ззовні значення і зберегти в поточну комірку
  7. [ Якщо значення поточної комірки - нуль, перейти вперед по тексту програми до ] з урахуванням вкладеності
  8. ] Якщо значення поточної комірки не дорівнює нулю, перейти назад за текстом програми до [ з урахуванням вкладеності
brainfuck.txt · Востаннє змінено: 2023/06/16 12:36 повз borisov