войти зарегистрироваться

Prolog Prolog. Программируем автоматы из песочницы

Прочитав статью о Prolog, я решил написать небольшое дополнение к ней в виде 2 небольших задач.
Вот они:
1. Интерпретатор языка brainfuck
2. Машина Тьюринга

Ненормальное программированиеBrainfuck на ленте с ячейками неограниченной разрядности

Возьмем машину, у которой система команд точно такая же, как в языке brainfuck, но которая работает на ленте, в ячейки которой можно поместить любые целые числа. Переполнения в арифметических операциях не происходит, команда "+", примененная к положительному числу, всегда даст положительный результат, и т.п. Спрашивается: можно ли работать на такой машине, какие возникнут проблемы и как их обойти?

Преимущества очевидны: раз нет переполнений, то нет нужды и в длинной арифметике, можно одинаково работать с массивами любой длины и т.п. Но довольно быстро мы замечаем, что наш любимый способ очистки ячейки ("[-]") не работает: если в ячейке было отрицательное значение, то программа зацикливается. Аналогично, мы не можем свободно использовать команду копирования "[->+<]" — она тоже работает только для неотрицательных чисел.

Получается, что при программировании нам надо внимательно следить за знаками содержимого ячеек (проще всего — не допускать появления отрицательных чисел вообще), а если возникнет число, знак которого неизвестен — работать с ним специальным образом

Здесь мы рассмотрим две задачи: во-первых, запрограммируем оператор «if(a>b) C; else D;» где a и b неотрицательны, а C и D — какие-то действия, а во-вторых, научимся обнулять, копировать и определять знак произвольного числа.

Персональные блоги Электрический Мозговынос



Другие ролики этого мозготеррориста тут.

Ненормальное программированиеПоздравление С Новым годом в стиле Brainfuck

Хочется поздравить читателей блога с Новым годом. Но не просто так, а написав поздравление на Brainfuck.

Первое поздравление выводит сообщение в виде ASCII-Art.

image

Ненормальное программированиеСортировка цифр на Brainfuck из песочницы

В этой статье я покажу вам, как отсортировать циферки с помощью Brainfuck.

Вы вводите цифры (каждая цифра не должна встречаться более 255 раз, при 8bit версии интерпретатора), после программа, если ее можно так назвать, выводит их по возрастанию.

Это будет реализация сортировки подсчётом, которая работает следующим образом:
1. Считывается число k.
2. В массиве A увеличиваем A[k] на единицу.
3. Повторяем шаги 1 и 2, пока не закончатся числа на входе.
4. Выводим A[i] раз число i, где i — это возможные значения чисел k.

PHPИнтерпретатор Brainfuck


В этот раз я оказался недоволен решением в одном из хабратопиков, а именно, использованием какого-то мусорного интерпретатора BF, который глючит на неправильном коде. В этом топике я расскажу о языке программирования Brainfuck и напишу интерпретатор для него.

BrainfuckПишем класс на php для интерпретации BrainLoller из песочницы

image
(Пример Brainloller кода увеличенного в несколько раз)

BrainLoller — это визуальный диалект языка Brainfuck, в котором символьные команды заменяются на пиксели разных цветов, считываемые с изображения в формате *.png.
Brainloller был придуман в 2005 году Lode Vandevenne.
Цвета команд были выбраны как комбинации значений 0xFF и 0x80 для трех RGB компонент. В результате была получена следующая таблица команд:
  • + = 0x00FF00
  • — = 0x008000
  • > = 0xFF0000
  • < = 0x800000
  • [ = 0xFFFF00
  • ] = 0x808000
  • . = 0x0000FF
  • , = 0x000080

В Brainloller добавлены также две дополнительные команды — 0x00FFFF (поворот указателя инструкций против часовой стрелки) и 0x008080 (поворот по часовой). Таким образом, “код” может записываться не в одну строку пикселей, а в двухмерное изображение. Перед началом выполения программы указатель инструкций находится в верхнем левом пикселе и направлен вправо. Изображение обрабатывается попиксельно, после каждой команды Brainfuck указательно инструкций сдвигается на один пиксель в том направлении, в котором он указывает. Выполнение программы заканчивается, как только указатель инструкций выходит за пределы изображения. (источник)

К сожалению, исходный набор инструментов для работы с Brainloller был утерян и мы попробуем в этой статье восполнить пробел)

Ненормальное программированиеИзобретаем язык программирования для тренировки мозгов. Или эзотерический язык программирования за 5 минут

Изучая вики по эзотерическим языкам я наткнулся на интересный язык программирования Piet. Отличительной особенностью которого является графическое представление программы. Например, эта программа выводит «Hello World!»
image
И показалось мне, что данная программа похожа на QR-Code.
image
Только Piet использует цветовую кодировку. А QR-Code использует комбинацию расположения точек.

Системное администрированиеApache, f**k my brain! из песочницы

На хабре уже достаточно много статей про брэйнфак и разнообразные программы на нём.
Однако, практической применимости, как мне кажется, отображено не было.
Поэтому хотелось бы показать, как можно использовать этот занимательный язык в реальной жизни, а так же заставить апач понимать какой-либо дополнительный транслируемый язык для отдачи страничек.
Написанное актуально для Debian GNU/Linux Squeeze, но достаточно просто может быть перенесено на любую другую платформу с апачем.

PythonРуководство: пишем интерпретатор с JIT на PyPy

Все исходные коды и примеры из этой статьи доступны здесь.

Когда я первый раз смотрел проект PyPy, мне потребовалось некоторое время, чтобы выяснить, что он из себя представляет. Он состоит из двух вещей:

— набор инструментов для написания интерпретаторов языков программирования;
— реализация Питона с применением этого набора инструментов.

Вероятно, большинство людей думает, что PyPy это только вторая часть, но это руководство не об интерпретаторе Питона. Оно о том, как написать интерпретатор своего языка.

Я взялся за это руководство для того, чтобы лучше понять как работает PyPy и что он из себя представляет. Предполагается, что вы очень мало знаете о PyPy, поэтому я начну с самого начала.