Malbolge

Материал из Seo Wiki - Поисковая Оптимизация и Программирование

Перейти к: навигация, поиск

Malbolgeэзотерический язык программирования, придуманный Беном Олмстедом в 1998 году. Язык разработан с целью быть максимально запутанным и неудобным для понимания и написания программ, при этом являясь полным по Тьюрингу.

Получил своё название от Malebolge, восьмого круга Дантова ада.

Содержание

Программирование на 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. Таблица действий интерпретатора:

Команды
Значение
([c] + c) % 94
Инструкция Пояснение
4 jmp [d] + 1 Переход к ячейке с номером значение [d] плюс 1.
5 out a Вывод значения a как символа ASCII на экран.
23 in a Ввод ASCII-символа в a. Разделитель строк имеет код 10. Конец файла — 59048.
39 rotr [d]
mov a, [d]
Поворачивает значение [d] на одну троичную цифру вправо (0002111112 превращается в 2000211111). Результат сохраняется в [d] и в a.
40 mov d, [d] Копирование значения из [d] в d.
62 crz [d], a
mov a, [d]
Произвести операцию crazy (см. ниже) со значениями [d] и a. Результат сохраняется в [d] и в a.
68 nop Ничего не делает.
81 end Конец программы.
Любые другие значения ничего не делают. Они не разрешены при загрузке программы, но разрешены после этого.

После выполнения каждой инструкции она шифруется (см. ниже). Сразу после прыжка тоже что-то происходит. После этого значения c и d увеличиваются на 1 и выполнение продолжается со следующей инструкции.

Операция crazy

Операция является аналогом побитовых операций — она применяется к двум соответствующим цифрам.

Операция crazy
crz 2-ая цифра
0 1 2
1-ая цифра 0 1 0 0
1 1 0 2
2 2 2 1

Шифрование

Таблица шифрования
Результат Шифрованное Результат Шифрованное Результат Шифрованное Результат Шифрованное Результат Шифрованное
0 57 19 108 38 113 57 91 76 79
1 109 20 125 39 116 58 37 77 65
2 60 21 82 40 121 59 92 78 49
3 46 22 69 41 102 60 51 79 67
4 84 23 111 42 114 61 100 80 66
5 86 24 107 43 36 62 76 81 54
6 97 25 78 44 40 63 43 82 118
7 99 26 58 45 119 64 81 83 94
8 96 27 35 46 101 65 59 84 61
9 117 28 63 47 52 66 62 85 73
10 89 29 71 48 123 67 85 86 95
11 42 30 34 49 87 68 33 87 48
12 77 31 105 50 80 69 112 88 47
13 75 32 64 51 41 70 74 89 56
14 39 33 53 52 72 71 83 90 124
15 88 34 122 53 45 72 55 91 106
16 126 35 93 54 90 73 50 92 115
17 120 36 38 55 110 74 70 93 98
18 68 37 103 56 44 75 104

99 бутылок пива

Работающий исходный код для песни "99 бутылок пива" с использованием настоящих циклов. Написан Hisashi Iizawa. Чрезвычайно запутанный код для песни 99 бутылок пива

Примечания

de:Malbolge

en:Malbolge es:Malbolge et:Malbolge fi:Malbolge fr:Malbolge hu:Malbolge it:Malbolge ja:Malbolge ko:Malbolge pl:Malbolge pt:Malbolge

Источник — «http://www.sbup.com/wiki/Malbolge»
Личные инструменты

Served in 0.248 secs.