Функция обчисления arctgx

Начал изучать этот язык недавно, и не могу написать функцию arctgx, пользуюсь Prolog 5.2 с интерпретатором Brainfuck. Сам студент 1-го курса, опыта мало, потому обращаюсь к вам. Задали сделать функцию arctgx и сделать так что бы можно было самому вводить число x. Объясните если не составит труда, а то сам уже 4 день не могу разобраться.
  • num314

Hello World! на брейнфаке в 97 байт

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++. >.+++.------.--------.>+.>.

Это самый короткий(длина 111 байт) хеллоуворлд на брейнфаке, который я смог найти. Он упоминается почти в каждой статье на брейнфаке и считается оптимизированным. Почти сразу после первого знакомства с бф мне захотелось написать более короткий вариант этого кода, но тогда у меня ничего не вышло, и я подумал, что дальше оптимизировать уже некуда:) Но совсем недавно у меня появилась идея немного другого, более короткого способа получения чисел. Я попробовал, не сильно заморачиваясь с оптимизацией, написать свой вариант кода. Самый первый вариант занимал всего 114 байт, самая большая проблема была с выводом перевода строки(код 10).
Вот этот самый первый вариант:
--[+++++++>---->-->+>+>+<<<<<]>.>>---------.>--..>+.<<<----.<+++++++++++++++.>>>>.+++.<.--------.<<+.<<++++++++++.

Дальше началась оптимизация. Просто поменяв местами ячейки, в которых находились заготовленные числа, так, чтобы перемещений стало меньше получился код размером 109 байт. Потом пошли уже незначительные сокращения(на 1-2 байта). Экспериментируя, получилось довести до 97 байт. Вот этот последний на данный момент вариант:
--[+++++++<---->>-->+>+>+<<<<]<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.
В итоге, получился хеллоуворлд на 14 байт короче распространенного. И всеравно мне кажется, его можно сократить его еще на байт 10:).
P.S. Самым неприятным так и остался вывод символа с кодом 10. Так и не удалось придумать ничего для более простого его вывода. Если выводить только Hello World! без последней 10, то вариант из 88 символов:
--[+++++++<---->>-->+>+>+<<<<]<.>++++[-<++++>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]
P.P.S Заранее извиняюсь, если где-то уже есть более короткий код, т.к. все исходники перерыть нереально.

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 аргумента, два из которых - макроподстановки).

Если кому-либо станет интересно - присоединяйтесь к проекту.
  • diafour

Сообщество

Привет всем, кто когда-то подписался на сообщество ru_brainfucker. Как вы помните, сообщество оказалось под натиском спамеров. Т.к. основатель d_m_ не отвечал, то мною была подана заявка в конфликтную комиссию ЖЖ, где я просил удалить бесполезные сообщения или дать мне права на удаление. Итог заявки - меня сделали основателем сообщества.

Всех с наступающим Новым годом!
  • 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