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 комментарий:
хех, что-ж, очень мило))
можно на досуге как-нить потрахать моск. пасыба =)
Отправить комментарий