понедельник, 27 августа 2007 г.

Brainfuck is sexy ;)

Дарова кодер!
Пока всякие патисоны отдыхают на всяких лазурных берегах мы трудимся не покладая рук для нашего же благополучия. Тем не менее наше время включает в себя куча всяких некодерских задач: подождать девушку, проехаться в сарайчике парочку остановок или просто посидеть. Так вот чтобы и в такие минуты мозги кодера не отдыхали, некто
Урбан Мюллер придумал эксплуатационную тулзу для нашего бедного кодерского мозга и назвал её "Brainfuck".
Забегая вперёд, скажу, что своё нвзвание она оправдывает с лихвой :)
В общем и целом: шозанах есть брейнфак? Это эзотерический язык программирования (то бишь создан не для решения практических задач, так что вири на нём писать нельзя :) ), который держит в синтаксе всего восемь команд.Итак, вот они:

8 команд языка Brainfuck:

> перейти к следующей ячейке

< перейти к предыдущей ячейке

+ увеличить значение в текущей ячейке на 1

- уменьшить значение в текущей ячейке на 1

. напечатать значение из текущей ячейки

, ввести извне значение и сохранить в текущей ячейке

[ если значение текущей ячейки нуль, перейти вперёд по тексту программы на ячейку, следующую за соответствующей ] (с учётом вложенности)

] если значение текущей ячейки не нуль, перейти назад по тексту программы на ячейку, следующую за соответствующей [ (с учётом вложенности)

Тааакс:)
Я думаю расшифровывать и пережёвывать это не надо :) Есть определённая лента ячеек, и на какую-то из них указывает зоркий глаз кодера. Это что-то наподобии Машины Тьюринга, даже не что-то наподобие, а она и есть. Короче, если ты был в универе, то понимаешь о чём я. Я в универе не был ещё ни разу, выходит что не понимаю о чём я ;) Ладно, давай кодить!

ХэллоВорлд!

Вот оно:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++
.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
------.--------.>+.>.
Вижу серьёзную рожу, пытающуюся въехать. Попробуем-с!
Итак, сперва разберём по полкам:
Сначала у нас есть определённая ячейка. Там нуль (я наверное забыл сказать, что по дифолту в ячейке - ноль :) )
++++++++++
Мы туда забиваем 10. Зачем, спросите вы? Дело в том, что коды букв слов "Hello World!" легче всего получить не наращивая в указателе сто раз, а потом уменьшать семьдесят, а забить самые близкие средние значения и потом вычитать. Вот они:
70, 100, 30, 10 .Если не понял, то сейчас увидишь:
[
начинаем цикл пока в текущей ячейке значение больше нуля. То есть, если мы будем вычитать по 1, то итераций будет 10.
>+++++++
Переходим к след. ячейке и наращиваем её значение на 7. Поняли, куда я иду? Далее третья, четвёртая и пятая ячейки соответственно:

>++++++++++
>+++
>+
Возвращаемся к первой ячейке и вычитаем из неё 1. Таким образом у нас будет 10 итераций.
<<<<-
Выходим из цикла:
]
Итак, теперь у нас во второй ячейке 70, в третьей 100, в четвёртой 30, а в пятой 10. Щас мы на первой ячейке, поэтому надо перейти:
>++.
Сейчас мы перешли к второму указателю и напечатали 72 что есть "Н".
Идём дальше. Выводим "e"(101), "ll" (108) и "o" (111). Обратите внимание, что "l" мы выводим дважды двумя точками:
>+.
++++++++..
+++.
Теперь печатаем пробел (32) и вперёд к "W" (87):
>++.
<<+++++++++++++++.

Теперь так как у нас в третьей ячейке есть буква "о", то мы просто её выводим:
>.
Дальше "r" (114), "l" (108), "d" (100), "!" (33)
+++.
------.
--------.
>+.
Потом нужно всего лишь перевести значение курсора на новую строку. (10)
>.
Вот и всё! Интерпретатор(компилятор) напишет "Hello World!". Конечно, это просто, но ведь ты можешь попробовать осуществить сложение, вычитание, умножение, возведение в степень или даже вычисление факториала или ряда Фибоначчи. Это всё в твоих руках, кодер. Главное, что теперь и в троллейбусе, и в маршрутке есть что делать!

Более того, есть целое сообщество Брейнфакеров, даже русское. Нет, они не живут по соседству с зоофилами и прочей уголовщиной, они просто большие любители Брэйнфака! http://community.livejournal.com/ru_brainfucker

П.С. Особенно рекомендуется тем кто долго возвращается с лазурных берегов. :)

Всем привет!

1 комментарий:

patison комментирует...

хех, что-ж, очень мило))
можно на досуге как-нить потрахать моск. пасыба =)

[Кодер]::Лого :) - просто как всё гениальное.