[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » Свободная зона » Флудилка » Обычные темы » Знакомьтесь: язык программирования BrainFuck (да простят меня админы за название темы)
Знакомьтесь: язык программирования BrainFuck
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
Для начала или вводный курс в эзотерический язык

Brainfuck придуман Урбаном Мюллером в 1993 году, в основном для забавы. Уникальный, вполне себе интересный Тьюринг-полный язык программирования с размером компилятора в 240 байт! В нём используется всего лишь 8 команд, каждая из них записывается одним символом. Программа на языке Brainfuck представляет собой последовательность этих самых команд.

То что может выполнять этот язык:
BrainFuck Developer - с продвинутыми функциями, там внизу ссылка есть на файл
http://brainfuck.progopedia.ru/ - выполнение программ в вашем браузере

Машина, которой управляют команды Brainfuck, состоит из упорядоченного набора ячеек и указателя текущей ячейки, получается что-то вроде стека и смещения в нём. Так же реализована возможность механизма ввода-вывода, далее будет понятно на примере.

Список всех команд языка

> перейти к следующей ячейке
< перейти к предыдущей ячейке
+ инкремент значения в текущей ячейке на 1
- декремент значение в текущей ячейке на 1
. напечатать значение из текущей ячейки
, ввести извне значение и сохранить в текущей ячейке
[ если значение текущей ячейки равно 0, перейти вперёд по тексту программы на ячейку, следующую за соответствующей закрывающей ] (с учётом вложенности)
] если значение текущей ячейки не равно 0, перейти назад по тексту программы на ячейку, следующую за соответствующей открывающей [ (с учётом вложенности)

Изначально задумывалось число ячеек в 30 тыс., каждая размером в байт. По умолчанию указатель находится в левой ячейке (ячейка 0); значения всех ячеек равны 0. Ввод/вывод значений происходит по таблице ASCII, точнее по числовому смещению в этой таблице. Например 32 знака "+" и точка — выведут на экран пробел в нулевой позиции, последующий знак ">" переведёт нас к следующей ячейке. Если теперь ввести 72 знака "+" и точку — выведется буква «H». Конструкция +++[.-] по сути цикл, вносим в ячейку значение 3, выводим на экран значение из ячейки и уменьшаем его, соответственно получится вывод символов с кодами 3, 2 и 1.

Параметры языка могут отличаться от разновидностей!

«Hello World!»

+++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++.+++++++++++++++++
++++++++++++.+++++++..+++.---------------- ---
---------------------------------------------
---------------.+++++++++++++++++++++++++++++
++++++++++++++++++++++++++.++++++++++++++ ++++
++++++.+++.------.--------.------------------
---------------------------------------------
----.-----------------------.

Собст венно 72 вывод «H», в этой же ячейке прибавляем ещё 29 вывод «e» и т.д., манипулируя прибавлением/убавлением значения в одной единственной ячейке. Значения не пишутся в ячейку, а выводятся на лету.

Прокачанный «Hello World!»

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++
.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
------.--------.>+.>.

Так сказать хрестоматийный пример. Основан на предварительной подготовке 4 ячеек со значениями 70, 100, 30 и 10, чтобы проще было прибавлять или убавлять. Блок ++++++++++[>+++++++>++++++++++>+++>+<<<<-] 10 раз выполнит операции в цикле — прибавить 7 в первой ячейке, 10 во второй, 3 в третьей и 1 в четвёртой, после чего вернуться к ячейке 0 и уменьшить её. В последующих действиях можно уже разобраться и так.

Стырено с Хабра


:3
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
Вот написал на нем простой калькулятор:

,>++++++[<-------->-]
,>++++++[<-------->-]
,>++++++[<-------->-]
<<[>>+>>+<<<<-]
>[>+>>-<<<-]
<<[>>+<<-]>>
[>]>
>>>++++++[<<<++++++++>>>-]<<<.

Программа сделана таким образом, что если первый символ будет «0» то программа выведет результат сложения, если ввести какое либо другое число, то выведет разность чисел. Например введем 163, «1» – значит будет разность, то есть 6-3, и выведет 3
если введем 063 то выведет 9

Не вводим числа сумма которых больше 9, так как произойдет переход на следующий символ находящейся после 9, либо в этом случае используем BrainFuck Developer и в нем смотрим на память

Кого заинтересовало могу выложить статью про разбор моего калькулятора (статья моя и с картинками :) )


:3
 
killeroi
Хранители порядка
Сообщений: 1850
Реп: 88 / Инв: 9
Знакомтесь:sonic пользователь который имеет желания расширять свои познания в языках программирования

Как в старые добрые
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
этот язык программирования фактически для мазохистов либо для тех у кого много свободного времени)

:3
 
killeroi
Хранители порядка
Сообщений: 1850
Реп: 88 / Инв: 9
а не для мазохистов какой?

Как в старые добрые
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
[WEC]SonicX, их много, начинают программировать обычно с basic и pascal

:3
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
Quote (Lex-Serest)
«Hello World!»

+++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++.+++++++++++++++++
++++++++++++.+++++++..+++.--------- ------- ---
---------------------------------------------
---------------.+++++++++++++++++++++++++++++
++++++++++++++++++++++++++.++++++++++++++ ++++
++++++.+++.------.--------.------------------
---------------------------------------------
----.-----------------------.

На хрен оно надо ИМХО... лучше вместо того чтобы сутками писать всякое УГ на этом языке, лучше заняться написанием какой-то действительно нужной проги на нормальном языке программирования.




Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
firsacho, я на нем программирую когда куда нибудь еду или на скучной паре, на смартфоне

Quote (firsacho)
всякое УГ на этом языке

этот язык развивает: логику и гибкость ума, один человек на нем написал мини морской бой (видимо ему вообще делать нечего)

Quote (firsacho)
нужной проги на нормальном языке программирования

мне лень :D


:3
 
killeroi
Хранители порядка
Сообщений: 1850
Реп: 88 / Инв: 9
Quote (Lex-Serest)
pascal

Увидев учебник начальных курсов pascal неподготовленный юзер может упасть в обморок :D

Добавлено (08.01.2011, 00:38)
---------------------------------------------
У меня пару вопросов по программе PHP Devel Studio 2.0 к firsacho. Как открыть файл по имени а не по пути размещения (они всех людей путь к папке worms 4 разный а надо чтобы открыл именно Worms 4.EXE) и как то же самое сделать с программой которой в событии при нажатии кнопки мыши на кнопку в окне открывался файл tweaks.xml то есть открыть файл tweaks.xml прогой notepad.exe при том что пути к ним неизвестны


Как в старые добрые
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
Quote (|WEC|SonicX)
У меня пару вопросов по программе PHP Devel Studio 2.0 к firsacho

я через нее написал лаунчер и больше не юзал пока, так что я в ней нуб.

Quote (|WEC|SonicX)
Как открыть файл по имени а не по пути размещения (они всех людей путь к папке worms 4 разный а надо чтобы открыл именно Worms 4.EXE)

Ну надо сделать чтобы пользователь указал адрес к проге наверное или кинул твою прогу в папку с червями. Еще при установке червей адрес установки забивается куда-то в реестр, его использует стандартный лаунчер червей для запускается.

Quote (|WEC|SonicX)
открыть файл tweaks.xml прогой notepad.exe при том что пути к ним неизвестны

ну если ты узнаешь где путь к червям то и твикс найдешь, а чтоб блокнотом открывал - хз как

Вобщем спрашивай на форуме PHP Devel Studio




Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
php не для создания программ, пхп обычно используется для вэб программирования следовательно ты на нем не напишешь полноценных программ для винды
используй visual basic очень простая среда разработки и язык программирования очень прост

3.Ы. может тему о программировании создать?

З.Ы. третий час ночи поэтому могу нести щас всякий бред, надеюсь завтра над этим сообщением я ржать не буду


:3
 
killeroi
Хранители порядка
Сообщений: 1850
Реп: 88 / Инв: 9
ну а как выглядит твой код
Я пробовал
Run("ps_open_file(WORMS 4 MAYHEM.EXE)", true);


Как в старые добрые
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
я на бэйсике программировал всего 2 раза
потом понял его ущербность, откуда мне знать

минута гугления: http://forum.codenet.ru/showthread.php?t=7695


:3
 
killeroi
Хранители порядка
Сообщений: 1850
Реп: 88 / Инв: 9
Firsacho короче дашь мне свой код я посмотрю его и сделаю для себя выводы чем щас в 3 часа ночи ломать мозг себе и другим

Добавлено (08.01.2011, 02:59)
---------------------------------------------
Функция ps_open_file(переменная)
При том переменная может содержать psdoc или имя файла открываемого для проги
Но сколько я не мучил мозг возвращаемое значение всегда false


Как в старые добрые

Сообщение отредактировал [WEC]SonicX - СБ, 08.01.2011, 02:59:58
 
DrHitman27
Админы
Сообщений: 2115
Реп: 52
а разве в команде Run("ps_open_file(WORMS 4 MAYHEM.EXE)", true); WORMS 4 MAYHEM.EXE это не string должен быть? тоесть в ковычках его записать надо, а то его как переменную воспринимает возможно. Ну и вобще запись Run("ps_open_file(WORMS 4 MAYHEM.EXE)", true); странная, хоть я и не знаю языка её смысл выполнить исполняемый файл "ps_open_file(WORMS 4 MAYHEM.EXE)", мне кажется надо так писать Run("WORMS 4 MAYHEM.EXE", true);

но как я и сказал, языка я не знаю. такчто могу ошибаться.


 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
Quote (Lex-Serest)
php не для создания программ, пхп обычно используется для вэб программирования следовательно ты на нем не напишешь полноценных программ для винды
используй visual basic очень простая среда разработки и язык программирования очень прост

PHP Devel Studio - это проект интерплитатора языка PHP для написания приложений. Разумеется функции PHP дополнены http://develstudio.ru/ . Мне это показалось интересным, т.к. PHP мне известен лучше всего и влом изучать язык, ради пары небольших приложений)

Но сразу при написании первой же проги заметился большой недостаток DevelStudio - остсутствие нормального справочника-учебника, содержащего все новые функции добавленные в язык и примеры их использования.
Поэтому приходилось долго ковырять форум или писать методом тыка (прога подсказывает названия функций, но не объясняет их значение). Хотя может ща они уже и исправили этот недостаток.

Quote (|WEC|SonicX)
Firsacho короче дашь мне свой код я посмотрю его и сделаю для себя выводы чем щас в 3 часа ночи ломать мозг себе и другим

Я тебе в другой раз как-нибудь могу исходный код кинуть, сейчас я не на своем компе, а мой на другом конце города.




Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
соник, кстати говоря, если хочешь получить исходный код Creating super weapon v2 запусти ее с параметром /i
про это написано внутри инструкции в проге


:3
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
По поводу Brainfuck - одна из моих первых программ на C# была интерепретатором брейнфака)
Даже попробовал сделать бой в памяти 2-х бегущих навстречу программ =)
P.S. C# - один из последних изученных мною языков..

Присоединяюсь к Lex-у в их споре с firsacho по поводу необходимости таких явлений как брейнфак.


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Drun
Хранители порядка
Сообщений: 1099
Реп: 23 / Инв: 14
Взрослые дядьки спорят по поводу "нужен или нет нецензурный программный язык" :D

Сообщение отредактировал Drun - ВС, 09.01.2011, 10:29:34
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
А кто спорит, никто не спорит. Просто я считаю что это непрактичный язык и на него только время и силы уходят...
Если хочется погрузить мозг лучше как Герыч писать искусственный интеллект или программировать физику воды) запар не меньше чем с калькулятором на Брейнфаке, но результат намного интереснее и более востребован.




Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
Форум » Свободная зона » Флудилка » Обычные темы » Знакомьтесь: язык программирования BrainFuck (да простят меня админы за название темы)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: