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

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


brainfuck

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Порівняння попередніх версій Попередня ревізія
Попередня ревізія
brainfuck [2017/09/22 18:33]
brainfuck [2023/06/16 12:36] (поточний)
borisov
Рядок 1: Рядок 1:
 +====== Написання модулів на Brainfuck ======
  
 +Починаючи, з релізу Ubilling 0.8.5 Valhalla стало можливим використовувати код на [[https://ru.wikipedia.org/wiki/Brainfuck|Brainfuck]] у своїх модулях.
 +
 +====== Навіщо? ======
 +Мова Brainfuck відома своїм мінімалізмом і крім того є Тьюринг-повною мовою. Наша команда розробників, своєю чергою, вважає, що витончений і водночас функціональний синтаксис Brainfuck якнайкраще підходить для розроблення прикладних модулів для Ubilling, і максимально відповідає його ідеології. Також ми не сприймаємо дискримінацію в будь-яких її проявах, і вважаємо, що всі мають право розробляти модулі для Ubilling, незалежно від статі, раси, релігії, статевої орієнтації та взаємовідносин з важкими наркотиками....
 +
 +====== Трохи прикладів  ======
 +Підключаємо інтерпретатор Brainfuck із відповідної бібліотеки. 
 +<code php>
 +require_once('api/vendor/bf/Brainfuck.php');
 +$bf=new dotzero\Brainfuck();
 +</code>
 +
 +Просто виконання коду:
 +<code php>
 +$code = '++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>++.>+.+++++++..+++.<<++.>+++++++++++++.+++++++++++++.>------.+++..---.+++++.<+++++.';
 +$bf->setCode($code);
 +show_window(__('Brainfuck code execution result'), $bf->run(true));
 +</code>
 +
 +А якщо нам хочеться передати якісь вхідні дані? Все так само дуже просто:
 +<code php>
 +$bf->setCode('>,[>,]<[<]>[.>]');
 +$bf->setInput('this is input data');
 +show_window('input test', $bf->run(true));
 +</code>
 +
 +Але, можливо, ми хочемо інкапсулювати всередину PHP код, працювати з базою і робити інші круті речі, наприклад показати список користувачів у вигляді красивої таблички? Та скільки влізе:
 +<code php>
 +$code='++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>++++++.>>---.+++++++++++..<---------.<----.>>++++++++++++++.-----------------'
 +        . '-------.---.----------.++++++++++++++++++++++++++++++.--------------.+++++++++++++.<++++++++++.>-------------.++++++++'
 +        . '+++++++.<------.>--------..<++++++++++++++++++.>++++++++.<++++++++++++++.>--.<++++++.------.>++++++++.<++++.>--------.'
 +        . '<-------------------------.>---.--------.++.+++++.+++++.<<++++++++.+.>-----------------.<---------.>>.-----------.++++'
 +        . '+++.++++++++.------------------------.++++++++++++++++++++++++.--------------.+++++.----------.+++++++++++.++++++++.<<+'
 +        . '+++++++.>>------------------------..<<.-.>>----------.++++++++++++++++++++++++++++++.--------------.+++++++++++++.+.<<'
 +        . '-------.>>-------.---.++++++++++.+.<<+++++++.++.+++.------------..>>+++.------------------.---.---.----------.++++++++'
 +        . '++++++++++++++++++++++.--------------.+++++++++++++.<++++++.>..-----------------.++++++++++++++++++++++++.<++++++++++++'
 +        . '++++++.>-----------------.+++++++.++++++++.<++++++++++++++++++.>-----.<<++++++++.----.>----.>------..<<+++++..+++++++++'
 +        . '+++++++++.';
 +$bf->setCode($code);
 +$bf->execute();
 +</code>
 +
 +Ну і власне результат:\\
 +{{:bfuserlist.png?600|}}
 +
 +
 +====== Пам'ятка із синтаксису ======
 +Весь синтаксис складається аж із 8-ми операторів:
 +
 +  - **>** Перейти до наступної комірки
 +  - **<** Перейти до попередньої комірки
 +  - **+** Збільшити значення в поточній комірці на 1
 +  - **-** зменшити значення в поточній комірці на 1
 +  - **.** надрукувати значення поточної комірки
 +  - **,** Ввести ззовні значення і зберегти в поточну комірку
 +  - **[** Якщо значення поточної комірки - нуль, перейти вперед по тексту програми до **]** з урахуванням вкладеності
 +  - **]** Якщо значення поточної комірки не дорівнює нулю, перейти назад за текстом програми до **[** з урахуванням вкладеності