Befunge & Malbolge

Befunge & Malbolge
Befunge — стековый эзотерический язык программирования. Считается двумерным, так как программа на Befunge записывается в таблицу со сшитыми краями (тор), по которой в различных направлениях перемещается интерпретатор, исполняя команды, расположенные в её ячейках. Первая версия языка Befunge была создана Крисом Пресси в 1993. Как утверждал автор, его целью было разработать язык, максимально сложный для компиляции. Сложность обеспечивается командами p и g, модифицирующими текст программы. Версия Befunge-93 ограничена таблицей 25X80 (стандартный размер текстового экрана) и потому не обладает тьюринговской полнотой. Befunge на бесконечной таблице полон по Тьюрингу. Все одномерные языки программирования требуют некоторых синтаксических различий между комментариями и исходным кодом. В языке Befunge нет особого синтаксиса для комментариев, чтобы вставить документацию в код программист просто «обводит» управление вокруг области комментария. Система команд Befunge Ниже перечислены команды языка Befunge. Каждая команда кодируется одним ASCII-символом. Для стековых операций в скобках дан их эквивалент в языке Forth. Команды, берущие параметры из стека, удаляют их со стека. перемещение (9):
>     Двигаться вправо
<     Двигаться влево
^     Двигаться вверх
v     Двигаться вниз
_     Двигаться вправо, если на вершине стека 0, иначе — влево.
|     Двигаться вниз, если на вершине стека 0, иначе — вверх.
 ?     Двигаться в случайном направлении
#     Пропустить следующую ячейку ("трамплин")
@     Конец программы
манипулирование со стеком (3):
:     Поместить в стек копию вершины (forth:DUP)
\     Обменять местами вершину и подвершину (forth:SWAP)
$     Удалить вершину (forth:DROP)
[b]модификация кода программы (2):[/b]
p     "PUT": со стека извлекаются координаты ячейки и ASCII-код символа, которой помещается по этим координатам
g     "GET": со стека извлекаются координаты ячейки; ASCII-код символа по этим координатам помещается в стек
константы (2):
0-9     Поместить число в стек
"     Начало/конец символьного режима, в котором ACSII-коды всех текущих символов программы помещаются в стек
стековые арифметические операции (5):
+     Сложение вершины и подвершины (forth:+)
-     Вычитание вершины и подвершины (forth:-)
*     Умножение вершины и подвершины (forth:*)
/     Целочисленное деление (forth:/)
 %     Остаток от деления (forth:MOD)
стековые логические операции (2):
!     Отрицание: нуль на вершине заменяется на 1, ненулевое значение — на 0 (forth:0=)
`     Сравнение "больше, чем": если подвершина больше вершины, в стек помещается 1, иначе 0 (forth:>)
ввод-вывод (4):
&     Запросить у пользователя число и поместить его в стек
~     Запросить у пользователя символ и поместить в стек его ASCII-код
.     Распечатать вершину стека как целое число (forth:.)
,     Распечатать символ, соответствующий ASCII-коду на вершине стека (forth:EMIT)
Примеры программ Бесконечный цикл

>v
^<
Программа, печатающая «Hello World!»
>                          v
@,,,,,,,,,,,,"Hello World!"<
Генератор случайных чисел
vv  <      <
     2
     ^  v<
  v1<?>3v4
     ^   ^
 >  >?>  ?>5^
     v   v
  v9<?>7v6
     v  v<
     8
  .  >  >   ^
 ^<
Malbolge — эзотерический язык программирования, придуманный Беном Олмстедом в 1998 году. Язык получил своё название от восьмого круга Дантова ада. Программирование на Malbolge Malbolge настолько сложен для понимания, что код первой программы на нём сгенерировала другая программа, написанная на языке Lisp, через два года после появления самого языка Malbolge. 24 августа 2000 года Энтони Йонес в своём блоге анонсировал несколько работающих программ на языке Malbolge. Позже Томас Вергзановски создал генератор рабочих программ. Hello world Эта программа на Malbolge отображает «Hello, world».
(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**
hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<
Виртуальная машина Malbolge — это машинный язык для виртуальной машины (интерпретатора), работающей в троичной системе счисления. Регистры В виртуальной машине Malbolge есть три регистра: a, c и d. c является указателем на текущую инструкцию; кроме того, c и d могут использоваться при косвенной адресации. При запуске программы все регистры равны нулю. Память Размер памяти виртуальной машины — 59049 (310) ячеек с числами из 10 троичных цифр. Все числа имеют адреса от 0 до 59048 и значения от 0 до 59048. Все изменения происходят по модулю 59049 (например, 59048+1=0). При запуске программы начало памяти заполняется её текстом. Символы пустого пространства (пробелы, табуляция, переносы строк и т.д.) игнорируются, а остальные символы должны быть командами Malbolge. Остаток памяти заполняется с использованием операции crazy (см. ниже): [m] = crz [m-2], [m-1]. Команды В Malbolge есть 8 команд. Виртуальная машина определяет какую команду выполнять так: к значению ячейки с адресом c ([c]) прибавляется значение c, а в качестве команды выступает остаток от деления этого числа на 94. Таблица действий интерпретатора: Befunge &amp; Malbolge После выполнения каждой инструкции она шифруется (см. ниже). Сразу после прыжка тоже что-то происходит. После этого значения c и d увеличиваются на 1 и выполнение продолжается со следующей инструкции. Операция crazy Операция является аналогом побитовых операций — она применяется к двум соответствующим цифрам. Befunge &amp; Malbolge Шифрование Befunge &amp; Malbolge
  • +8
  • 02 февраля 2009, 17:23
  • BopoH

Комментарии (7)

RSSсвернуть /развернуть
+
+1
я не выучу ab
avatar

EGORRR

  • 02 февраля 2009, 17:28
+
+1
хватит иппать нам мозг, выкладывая подобную шелуху… :)
avatar

Celeron

  • 02 февраля 2009, 17:49
+
+3
Еще бы код на brain fuck выложили.
avatar

ExiD

  • 02 февраля 2009, 18:11
+
+1
капец просто be

>v
^<


bj
avatar

FrikerOla

  • 02 февраля 2009, 18:54
+
+1
китайская грамота
avatar

ja91

  • 02 февраля 2009, 19:45
+
+1
-=] FrIkEr [=-,
***, а чего зависло всё?!? О_о
ag ag ag
avatar

Katan

  • 03 февраля 2009, 03:30
+
0
Oh fack my brain bu
avatar

MITSUBISHI

  • 29 января 2010, 23:01

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
Валидный HTMLВалидный CSSRambler's Top100