BRAINFUCK
(aka БРЕЙНФАК, aka BF, aka БФ, aka МОЗГОЁ#КА)

Трюки мозготрахера


Перемещение
Начнем с самого элементарного. В стартовой ячейке есть число, которое нужно переместить в ячейку правее.
Для этого нужно увеличивать значение ячейки правее на 1 и уменьшать значение стартовой ячейки на 1 пока оно не не стенет равным нулю. Реализуем:

Код:
[>+<-]

     или
Код:
[->+<]

Вот так. Все проще паренной репы.

Копирование
С копированием немного сложнее. Пусть условия те же, только число нужно не переместить, а скопировать. Тут не обойтись без еще одной вспомогательной ячейки. Сначала переместим число из ячйеки n в две ячейки: (n+1) и (n+2).

Код:
[>+>+<<-]

После этого каретка будет находиться, как и в начале выполнения, на ячейке n, а в ячейках (n+1) и (n+2) будет число, равное первоначальному значению ячейки n. Теперь нам нужно переместиться во вспомогательную ячейку (n+2), переместить ее значение обратно в ячейку n и вернуть туда каретку.

Код:
>>[<<+>>-]<<


В обоих этих случаях предполагается, что все задействованные ячейки, кроме n-ной пусты(т.е. заполнены нулем). Следует заметить, что если это не так, то значение первой ячейки не перемещается во вторую, а добавляется к ее начальному значению. Ячейку, значение которой больше нуля всегда можно очистить так: [-]

Умножение
Это уже посложнее, но мы справимся, правда? (: Итак, вернемся во второй класс к арифметике. Что такое умножение? Это прибавление числа к самому себе определенное кол-во раз, например n * 3 = n + n + n. Допустим, что у нас в ячейке n находится число, которое нужно умножить на 5. Для этого мы будем уменьшать чило в ячейке n на 1 и увеличивать число в ячейке (n+1) на 5.

Код:
[>+++++<-]

Теперь можно переместить это значение в стартовую ячейку:

Код:
>[<+>-]<

Деление
Я опишу здесь только целочисленное деление, если вы хотите делить вещественно, то думайте сами, не преподносить же вам все разжеванным на блюдечке с голубой каемочкой (: Желательно знать заранее число, на которое вы собираетесь делить, именно такой случай я и опишу, потому что иначе это будет стоить гораздо больше труда. Итак, допустим нам нужно разделить число в ячейке n на 3, при условии, что оно действительно делится нацело на 3.

Код:
[>+++<-]>[<+>-]<


Спасибо, господа, за чтение приготовленного мной материала. Дальше думайте сами. Возможно, если мне не будет лень, я буду пополнять данную базу триков. Энджой! :D

Копирайт (ц) nitnatsnok 2009-2010
Free Web Hosting