русский брэйнфакер
[Most Recent Entries]
[Calendar View]
[Friends]
Below are the 20 most recent journal entries recorded in
русский брэйнфакер's LiveJournal:
[ << Previous 20 ]
| Thursday, April 21st, 2011 | 6:49 pm [num314]
 |
Hello World! на брейнфаке в 97 байт
++++++++++[>+++++++>++++++++++>+++>+<<<< -]>++.>+.+++++++..+++.>++.<<++++++++++++ +++. >.+++.------.--------.>+.>. Это самый короткий(длина 111 байт) хеллоуворлд на брейнфаке, который я смог найти. Он упоминается почти в каждой статье на брейнфаке и считается оптимизированным. Почти сразу после первого знакомства с бф мне захотелось написать более короткий вариант этого кода, но тогда у меня ничего не вышло, и я подумал, что дальше оптимизировать уже некуда:) Но совсем недавно у меня появилась идея немного другого, более короткого способа получения чисел. Я попробовал, не сильно заморачиваясь с оптимизацией, написать свой вариант кода. Самый первый вариант занимал всего 114 байт, самая большая проблема была с выводом перевода строки(код 10). Вот этот самый первый вариант: --[+++++++>---->-->+>+>+<<<<<]>.>>------ ---.>--..>+.<<<----.<+++++++++++++++.>>> >.+++.<.--------.<<+.<<++++++++++. Дальше началась оптимизация. Просто поменяв местами ячейки, в которых находились заготовленные числа, так, чтобы перемещений стало меньше получился код размером 109 байт. Потом пошли уже незначительные сокращения(на 1-2 байта). Экспериментируя, получилось довести до 97 байт. Вот этот последний на данный момент вариант: --[+++++++<---->>-->+>+>+<<<<]<.>++++[-< ++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+ >->>.+++[.<]<<++. В итоге, получился хеллоуворлд на 14 байт короче распространенного. И всеравно мне кажется, его можно сократить его еще на байт 10:). P.S. Самым неприятным так и остался вывод символа с кодом 10. Так и не удалось придумать ничего для более простого его вывода. Если выводить только Hello World! без последней 10, то вариант из 88 символов: --[+++++++<---->>-->+>+>+<<<<]<.>++++[-< ++++>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->> .+++[.<] P.P.S Заранее извиняюсь, если где-то уже есть более короткий код, т.к. все исходники перерыть нереально. | | Saturday, January 15th, 2011 | 12:39 am [worldalexey]
 |
IronBrainF*ck, SimpleBrainF*ck См. проект на Codeplex с исходным кодом и бинарниками. IronBrainFuck - реализация BrainFuck в .NET. Имеются как интерпретатор, так и JIT компилятор, оба - наследники BrainFuckMachine. Данная реализация использует UInt16[UInt16.MaxValue + 1] для представления значений, при этом лента зациклена на значениях от 0 до UInt.MaxValue. Расширениями, не являющиеся стандартными - операции '@' и '#', где первая - ввод числа в ячейку (не символа), вторая - дебаг-вывод значения в виде [индекс=значение(символ)]. Обе операции полезны лишь для отладки, однако без них вполне можно обойтись. На базе IronBrainFuck построен, в том числе, компилятор BrainFuckCompiler, который сохраняет IL код в сборку для выполнения (.exe файл). SimpleBrainFuck - IDE и одновременно язык, немного упрощающий процесс написания BrainFuck программ. С помощью IDE пишется программа на SBF, затем транслируется в BF, который удобно выполнять в интерактивной консоли. Язык фактически выполняет макроподстановки, подробности на странице документации. В файле примеров general.sbf определены такие методы, как - mul, div, mod - умножение, целочисленное деление и остаток от него
- input_digit, input_number - ввод цифры и числа, используя стандартные для BrainFuck способы (операция ',')
Арифметические методы интересны тем, что они удобны для последующего использования: достаточно сдвинуться на ячейку первого аргумента, затем передать параметры макроподстановки - относительные адреса второго значения, результата и блока временных ячеек, т.е. нет зависимости от того, где именно они находятся.
Методы ввода предлагают то, чего часто не хватает программам на BrainFuck'e: проверок на корректность ввода. Оба метода проверяют, вводились ли цифры или другие символы (+ обработка отсутствия ввода) .
Основная конструкция языка - это def: def somemethod x y r t $shift @x // переместится на @x (влево или вправо - зависит от знака @x) @r~x = @r - @x // узнаём относительные адреса r и t @t~r = @t - @r $copy @r~x @t~r // копируем x в r, используя t /// ... end
def'ы могут иметь произвольный уровень вложенности и вызываются (хотя скорее подставляются) через $somemethod 1 @h 2 @w (4 аргумента, два из которых - макроподстановки).
Если кому-либо станет интересно - присоединяйтесь к проекту. | | Tuesday, December 28th, 2010 | 2:26 pm [diafour]
 |
Сообщество
Привет всем, кто когда-то подписался на сообщество ru_brainfucker. Как вы помните, сообщество оказалось под натиском спамеров. Т.к. основатель d_m_ не отвечал, то мною была подана заявка в конфликтную комиссию ЖЖ, где я просил удалить бесполезные сообщения или дать мне права на удаление. Итог заявки - меня сделали основателем сообщества. Всех с наступающим Новым годом! | | Thursday, December 23rd, 2010 | 2:55 am [diafour]
 |
Brainfuck для Android
Нашлось целых 3+1 приложения для Android, которые позволяют ввести и выполнить программу на BF. Тройка иделогически похожих друг на друга приложений написана Andrew Kallmeyer (Brainfuck [>]), PsHegger (Brainfuck BF) и gabehabe (BrainFuck [-]). Все приложения устроены довольно одинаково - есть несколько вкладок, причем в каждом приложени присутствует вкладка с полем ввода и вкладка с результатами работы программы. [>] на моём hero выдаёт фатальную ошибку при попытке запуска любой программы. Зато есть таблица ASCII, доступная через меню. В этом приложении есть своя клавиатура для ввода команд brainfuck - очень удобно. [-] Закладка Help очень в тему. Но вот окошко ввода, возникающее при команде , не работает,т.е. при вводе любого символа возникает снова с пустым полем ввода. BF Самая развесистая программа из тройки. Умеет сохранять и загружать в редактор кода набранные программы. Есть конвертор hexa-ascii. Однако есть проблемы с прокруткой в поле ввода редактора кода - поле улетает вверх и возвращается, только если убрать клавиатуру. Все перечисленные программы вылетают или виснут от бесконечного цикла. =) В общем-то все программы обладают набором каких-то полезных особенностей, которых нет в других программах, но ни одна не справилась с задачей удобного ввода программы на brainfuck и отображения результатов работы на 100%. Есть ещё один вариант интерпретатора - модуль для REPL. Не самый лучший вариант для редактирования и размышлений над кодом. Вердикт таков: Если нужно что-то написать один раз и выполнить, то лучше всего [-] или REPL module. Если же хочется иметь под рукой несколько разных текстов программ, то BF альтернативы нет. В целом хотелось бы удобного и неглючного ввода команд, а также всех перечисленных вкусностей в одной программе =) Программы можно найти в андроид.маркете или здесь: http://www.androidzoom.com/android_applications/brainfuck | | Sunday, November 28th, 2010 | 8:15 pm [infthi]
 |
| | Friday, July 2nd, 2010 | 4:31 pm [qwehkwerjhbgkwe]
 |
| | Wednesday, June 16th, 2010 | 2:20 pm [tunyash_c]
 |
еще один процедурный Brainfuck
$name(code) - задание процедуры. name - имя code - код Brainfuck %name(par0;par1;par2;...) - вызов процедуры name - имя, в скобках - параметры, представляющие собой куски кода. {0} {1} {2} - вставка параметра c соответствующим номером в тело процедуры. кол-во параметров неограниченно. Именем процедуры считается любой набор символов без круглых скобок и крайних пробелов. http://openfile.ru/620338/ - это несколько корявая среда. Сам быдлокод интерпретатор | | Monday, November 9th, 2009 | 10:41 pm [d_m_]
 |
BF Task
Друзья! Спешу напомнить, что данное сообщество не предполагает ограничиваться только эзотерическими языками программирования, и вообще - только программированием (см. about), в связи с чем и предлагаю задачку. Найти как можно более длинное слово, составить как можно более длинное предложение или связный текст etc., руководствуясь следующим:
- писать по-русски
- использовать только 33-12=21 русскую букву. Запрещаются 12 букв, смежных с латинскими, т.е. авекмнорстух
Пример такого текста см. здесь. Победителю - приз: всеобщее уважение и почёт :) (особо приветствуются автоматические генераторы текстов, написанные на BF:) | | Friday, October 9th, 2009 | 7:20 pm [tronix286]
 |
Стопицотый интерпритатор Brainfuck
Всем привет. Написал just for fun еще один интерпретатор языка классического Brainfuck. Исходники на Free Pascal конечно прилагаются. Особенности: Транслятор имеет некий пре-процессор, который сперва избавляется от всех символов, которые не являются опкодами BrainFuck, затем выполняет оптимизацию: <<<<< = заменяется на p# (prev) >>>>> = заменяется на n# (next)+++++ = заменяется на i# (inc) ---- = заменяется на d# (dec) [-],[+] = заменяется на z (zero) [<] = заменяется на l (left) [>] = заменяется на r (right) В итоге код из 20Kb может сократится до 3-5Kb. Далее транслятор обрабатывает уже этот байт-код, повышая тем самым быстродействие. Присутствуют ключи: -c - создать на диске файл OUT.BC, содержащий в себе байт-код после пре-процессора. -d - запретить препроцессор и выполнять обычным транслятором (если какие-то программы зависают). Если используется ключ -d выполняется почти обычный интерпретатор, но все равно с предугадыванием вышеназванных комбинаций, но "на лету". Скорость выполнения немного теряется. Ключ -c создает в том-же каталоге файл OUT.BC, просмотрев который в каком-нибудь HEX редакторе можно увидеть, как обработал исходный код пре-процессор. PS: Есть бага - транслятор с препроцессором не выполняет программу hanoi.bf (входит в архив). Она виснет. Почему - хз, не смог отловить. Понял что виснет из-за преобразования символов <<<< в p#. С ключем -d работает нормально. Остальные 45 программ с препроцессором тоже работают нормально. Странный баг... Забрать можно тут: http://tronix286.pochta.ru/soft/brainfk.zip | | Monday, September 28th, 2009 | 2:32 pm [realsonic]
 |
Как насчёт сделать участвие в журнале модерируемым, чтобы избежать спама? | | Saturday, February 7th, 2009 | 4:23 am [slobin]
 |
Для тех, кто помнит, что такое Core War: оказывается, в эту игру можно играть и на Брейнфаке! ссылка
... Слабая, но многообещающая садистская струнка ... | | Thursday, January 22nd, 2009 | 11:12 am [digs_]
 |
Object Brainfuck
Написал еще одну модификацию для BF. Попытался ввести ООП. Описание Каждая ячейка это теперь объект. Она хранит ClassType, т.е. указатель на класс и байт данных. Изначальные команды остаются рабочими и манипулируют байтами данных как обычными ячейками. Всего классов 26 (по количеству букв латинского алфавита) плюс базовый безымянный класс. Класс содержит всего один метод, который может быть вызван. Описание класса производится с помощью строчной буквы латинского алфавита, за которой в фигурных скобках идет описание метода. Например: a{##@} Указание в программе прописной буквы устанавливает в текущей ячейке соответствующий ClassType. Вызов метода объекта, находящегося в текущей ячейке, осуществляется командой «^». Как принято в ООП здесь так же присутствует наследование. Для наследования, при объявлении класса, нужно указать класс предок между именем нового класса и фигурной скобкой. Например: ba{$##} Здесь класс b наследуется от класса a. Символ «$» это команда вызова метода предка. Описание классов происходит в момент выполнение программы, поэтому оно может присутствовать где угодно. Также нет никакой структуры наследования. Т.е. b можно наследовать от a, c можно наследовать от b, а a, в свою очередь наследовать от c. И даже больше: класс можно наследовать от самого себя. При этом наследование будет именно от самого себя, а не от своего предыдущего описания. Т.е. таким образом, с помощью класса можно реализовать рекурсию. Изначально, каждая ячейка содержит ClassType базового класса, метод которого предназначен для очистки ячейки. Все 26 классов изначально являются наследника базового класса и их методы вызывают метод базового класса. Есть еще две команды, которые являются нестандартными для всего ООП. Это «*» и «/». Две эти команды, соответственно увеличивают и уменьшают на единицу ClassType в текущей ячейке. Т.е., к примеру, если в ячейке располагался объект класса b, то после операции «*» в ней будет находиться объект класса c. Для операций «*» и «/» за классом z следует класс a. "Hello World!" на Object BF a{++++}b{A^^^^}c{B^B^}d{----}C^C^^^.C^-- -.^^-..^-.>C^.C^B^^^-.B^^^.^-.D^--.^^.>C^ +. Немного подробнее и программа здесь: digs.alfaspace.net/works/bflabs/objbflabs | | Tuesday, December 2nd, 2008 | 12:16 pm [digs_]
 |
Brainfuck Labs (BFLabs)
Написал расширение для языка Brainfuck, которое ориентировано на построение лабиринтов. Кратко: Имеется двухмерное неограниченное поле, состоящее из клеток. Новая команда " #" предназначена для прогрызания прохода в этом поле на один шаг в определенном направлении. Чтобы между лежащими рядом проходами существовала стенка, один шаг равен двум клеткам. В BFLabs сделана двухпоточность. Т.е. на самом деле составляются две программы, которые выполняются параллельно. Команда из первого потока, команда из второго, потом опять из первого и так далее. За каждым потоком закреплен вектор, в направлении которого происходит прогрызание. Изначально для первого потока вектор (1,0), для второго (0,1). Помимо " #" есть еще две команды, которые управляют направлением прогрызания. @ разворачивает оба вектора на 90 градусов против часовой стрелки | команда, данная из одного потока, разворачивает вектор другого потока на 180 градусов Еще две команды, это фигурные скобки (" {" и " }"). Это своеобразная глобальная критическая секция. Открытая фигурная скобка заставляет остановиться другой поток и ждать, пока в текущем потоке не появится закрывающая фигурная скобка. Почитать немного подробнее и скачать программу можно здесь: digs.alfaspace.net/works/bflabs/doc | | Sunday, September 7th, 2008 | 3:34 pm [maxim]
 |
Io Language CLR — Promo
Время от времени я пишу компиляторы, интерпретаторы для .NET CLR, Например дописываю dotLISP (динамические делегаты как в DLR, макросы) или просто пишу компиляторы языков которых еще нет для CLR (например PL/1). И вот недавно меня попросили глянуть на Io Language. Цель даного поста представить вам имплементацию Ио Language Для .NET: Кто не знаком с Ио, могу сказать что его синтаксис очень простой и может включать в себя синтаксисы почти всех языков, что означает что на нем не только легко писать DSL, но и вообще писать на нем как на C ( пример), LISP ( пример) или PL/1 ( пример). Это для начала, что бы вас поразить. Внутри Ио из себя представляет Ъ ОПП язык, прототипный (нету классов, объекты создаются клонированием). Всё объекты как в смолтолке, есть доспут ко всему коду программы как в лиспе. Но это не самое интересное, самое интересное то, что параметры передаются в методоты\функции не вычисленными, а лексически разобраными. интерпретировати или вычислять или что-то еще делать - решаете вы внутри метода, во много благодаря этому и возможно такие модификация синтаксиса. Именно это меня остановило сходу написать компилятор, компилятор пока только в процессе. Оригинальный проект Ио конечно большой, есть биндинги для многих вещей, включая OpenGL или Objective-C (сам язык можно считать нано-смолтолком, а сами авторы сидят на Apple), в своей реализации я только написал базовую машину и построил мост для доступа к классам и методам CLR через рефлекшин, приблизительно так как это в dotLISP. Для чего это все надо ? еще один задротский язык ? Прежде всего он очень выразительный и имеет определенное академическое значение, он без сомнения будет интересен тем кто увлекается Smalltalk или LISP. Во-вторых у нас в компании используется dotLISP для скрптования приложений, как на сервере так и на клиенте, а также для организации енвайорементал бутстраппинга,и многих других вещей, вплоть до замены XML. Я подумал что было бы неплохо иметь в своем арменале еще и Ио, и сразу приступил к работе. От начала скачки оригинальной виртуальной машины Ио до релиза версии для .НЕТ прошло 3 недели. Писал исключительно для себя и своих целей, но думаю что многим будет интересно иметь Ио для .НЕТ. Кросспост: ru_iolanguage, ru_programming, ru_brainfucker | | Monday, April 28th, 2008 | 4:03 pm [xandir_ws]
 |
Brainfuck XML
Добрый день. Ровно полгода назад, 27 октября 2007 года, я совершил святотатство над языком разметки XML =) Благодаря философии языка BrainFuck мне удалось выйти за рамки простой структуризации данных. Он позволил создать «живую» структуру, которая может не просто описывать данные, но и саморазвиваться. Намедни, я разместил информацию об этом языке на портале Хабрахабр. Некоторые из читателей заинтересовались языком, некоторые подошли скептически. В ответ, в комментариях я попытался раскрыть некоторые особенности исопльзования языка, поэтому они лично для меня не менее важные, чем само описание. Также, мне очень интересно услышать ваше мнение об этом «чуде»: Brainfuck XML. Не корите сильно =) С уважением, Andy. | | Tuesday, January 22nd, 2008 | 12:45 am [zasen]
 |
esco v.0.30
Ура, товарищи. Благодаря вливанию новой крови в проект работа кипит. Среди прочих изменений одной главное - поддержка добавлена поддержка WhiteSpace. Для большей информации идём на сайт програмки http://esco.sourceforge.net/ | | Monday, January 7th, 2008 | 8:04 pm [zasen]
 |
| | Tuesday, December 4th, 2007 | 1:04 am [stebanoid]
 |
Остаток от деления.
Люди.. Что-то не могу на Brainfuck написать программу, ищущую остаток от деления числа на 3. Была идея отнимать 3 пока рез-т не станет меньше трех - потом вывести. Но не могу проверить можно ли ещё 3 отнять или уже нельзя.. :( Хэлп... | | Tuesday, October 23rd, 2007 | 11:32 pm [zasen]
 |
Esoteric Combine v.0.25
Зарелизил новую версию с небольшим изменением Эзотерического Комбайнера. Немного о проекте - это межплатформенный open-source интерпритатор эзотерических языков. На данный момент доступно 4 языка: Brainfuck Ook Spoon HQ+ Больше узнать по адресу: http://sourceforge.net/projects/esco/Также буду рад людям желающим присоеденится к проекту в качестве разработчиков, тестеров и т.д. | | Friday, September 14th, 2007 | 6:24 am [anohin]
 |
Новое реболюционное сообщество
Уважаемые сообщники! Основано новое жж-сообщество ru_rebol, в котором обсуждается почти функциональный и довольно объектный язык программирования REBOL. Приглашаю всех желающих присоединяться и принимать посильное участие. |
[ << Previous 20 ]
|