понедельник, 3 января 2011 г.

Brainfuck пример использования.

Иногда, от нечего делать в послепраздничные дни на ум приходят всякие не стандартные идеи. Покопатся в истории развития ИТ, попробовать различный софт/системы и тд.
Вот и в эти выходные "наступил" на BrainFuck . Оказалось - интереснейшая вещь, чем то напомнило програмирование на калькуляторах в 80-ых прошлого тысячелетия. Хотя нет, это даже намного суръезнее, так как операторов всего 8.
Не долго думая решил сваять простенькую прогу вывода таблицы ASCII кодов. Выводить просто коды было  бы не кошерно, потому завернул все это в 2 цикла и в результате получилось то, что вы можете созерцать ниже. Признаться, все это дело заработало далеко не сразу.
Без какого либо отладчика (пользовался только компилятором без вывода сообщений об ошибках) получить результат получилось спустя полчаса. Позже, нашел вполне рабочее IDE для написания и интерпретирования кода с помощью которого быстренько добавил кусок текста с "копирайтом" :).

Пример вывода таблицы кодов ASCII на языке Brainfuck.
Вывод производится по 32 символа в 7 строк.

Результат выполнения программы скомпилированной с помощью миникомпилятора:


 !"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~⌂
АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
абвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐
└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀
рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ 


Copyryght (c) 2010 by MinamotoSoft
minamotosoft@gmail.com


Исходный код с коментариями ("*" - знак комментария, для компиляции все строки комментов нужно удалить):

**********************************************
* (0) main cycle 7 string
+++++++
* (1) code enter chr13 CR
>+++++++++++++
* (2) code enter chr10 LF
>++++++++++
* (4) seg 32, chr(32) space
>>++++++++++++++++++++++++++++++++
* goto (0)
<<<<
* start cycle from 1 to 7
[
* goto (3) enter 32, second cycle
>>>++++++++++++++++++++++++++++++++
* start second cycle
[
* goto (4)
>
* print (4)
.
* (4)=(4)+1
+
* goto (3) & (3)=(3)-1
<-
* end second cycle if (3) = 0
]
* goto (2) print (2) (LF)
<.
* goto (1) print (1) (CR)
<.
* goto (0) & (0) = (0) - 1
<-
* end main cycle if (0) = 0
]
* print (CR LF CR LF)
>.>.<.>.<<
**************************************
* Copyryght (c) 2010 by MinamotoSoft *
* minamotosoft@gmail.com             *
**************************************
[-]>[-]>[-]>[-]>[-]<<<<
>++++++[<+++++++++++>-]<+. 
>++++[<+++++++++++>-]<. 
+. 
+++++++++. 
-------. 
---------.++++++++++++++++ 
>+++[<------>-]<.
+.
++++++++++++.
>+++++++[<------------>-]<.
++++++++.
>++++++[<++++++++++>-]<-.
>+++++++[<-------->-]<--.
---------.
>+++[<++++++>-]<.
--.
+.
-.
----------------.
>++++++[<+++++++++++>-]<.
>++++[<++++++>-]<-.
>++++++++[<----------->-]<-.
>+++++[<+++++++++>-]<.
>++++[<+++++++>-]<.
+++++.
-------------.
++++++++++++.
++.
+++++.
-----.
>++++[<------->-]<.
>++++[<+++++++>-]<.
---------.
++++++++++++++.
>++++++++[<------------->-]<+.
---.
>+++++++++[<+++++++++++>-]<.
----.
+++++.
-------------.
++++++++++++.
++.
+++++.
-----.
++++.
----.
---------.
++++++++++++++.
>++++[<------------->-]<.
>+++++[<++++++++>-]<-.
++++++.
------------.
++++++++.
+++.
>+++++++[<--------->-]<+.
>++++++[<+++++++++>-]<-.
++++++++++++.
--.
**********************************************

Комментариев нет:

Отправить комментарий