Malbolge

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Malbolge je volný ezoterický programovací jazyk, který vytvořil Ben Olmstead v roce 1998 a byl pojmenován po osmém kruhu pekla v dramatu Dante Alighieriho, Malebolge.

Malbolge byl navržen tak, aby bylo téměř nemožné ho používat kvůli neintuitivním „šíleným operacím“ a samomodifikujícímu se kódu. Navazuje na obtížnost časnějších, náročných esoterických jazyků (jako je Přesun a Befunge), ale bere tento aspekt do extrému, pohrávajíc si se spletitou minulosti počítačové vědy a šifrování. Navzdory tomuto návrhu je možné (i když velmi náročné) psát užitečné Malbolge programy.

Programování v Malbolge[editovat | editovat zdroj]

Malbolge bylo tak těžké pochopit, že trvalo dva roky než se objevil první Malbolge program. Sám autor nenapsal ani jeden program v Malbolge. První program nebyl napsán lidskou bytostí, byl vytvořen paprskovým prohledávacím algoritmem, navrženým Andrewem Cookem a uplatňovaným v Lispu.[1]

Později, Lou Scheffer zaslal dešifrování k Malbolge a poskytl program pro kopírování jeho vstupu na jeho výstup.[2] Také vložil interpretaci a specifikaci poté, co původní stránky přestaly fungovat a nabídl obecnou strategii pro psaní programů v Malbolge.

Olmstead věřil, že Malbolge bude lineárně ohraničený Turingův stroj. Diskutuje o tom, zda lze realizovat smysluplné smyčky v Malbolge. Program 99 Lahví Piva, který se zabývá netriviálními smyčkami a podmínkami, nebyl oznámen po dobu sedmi let; první správný byl od Hisashiho Iizawana v roce 2005.[3] Hisashi Iizawa také navrhl průvodce pro programování v Malbolge.

Příklad Programu[editovat | editovat zdroj]

Ahoj světe![editovat | editovat zdroj]

Tento program zobrazuje "Hello World!", obě slova začínají velkým písmen a věta končí vykřičníkem.

(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc

CAT Program[editovat | editovat zdroj]

Tento program čte řetězec od uživatele a vypíše tento řetězec.

(aBA@?>=<;:9876543210/.-,JH)('&%$#"!~}|{zy\J6utsrq
ponmlkjihgJ%dcba`_^]\[ZYXWVUTSRQPONMLKJIHGF('C%$$^
K~<;4987654321a/.-,\*)
j
!~%|{zya}|{zyxwvutsrqSonmlO
jLhg'edcba`_^]\[ZYXWV8TSRQ4
OBZVLÁŠTĚ,/KJIBGFE>CBA@?>=<;{9876w
43210/.-m+*)('&%$#"!~}|{zy\
wvunslqponmlkjihgfedcEa`_^O
\>ZYXWPUTSRQPONMLKJIH*FEDC&
A@?>=<;:9876543210/.-m+*)(já
&%$#"!~}|{zyxwvutsrqpRnmlkN
ihgfedcba`_^]\[ZYXWVU7SRQP3
NMLKJIHGFEDCBA@?>=<;:z8765v
3210/.-,+*)('&%$#"!~}_{zyx[
vutsrqjonmlejihgfedcba`_^]@
[ZYXWVUTSRo

Design[editovat | editovat zdroj]

Malbolge je programovací jazyk pro ternární virtuální stroj.

Standardní interpretace a oficiální specifikace neodpovídají dokonale.[4] Jeden rozdíl je, že kompilátor zastaví provádění s daty v rozsahu 33-126. I když to bylo zpočátku považováno za chybu v kompilátoru. Ben Olmstead uvedl, že to bylo zamýšleno a ve skutečnosti byla chyba ve specifikaci.

Registry[editovat | editovat zdroj]

Malbolge má tři registry a, c a d. Když program začíná, hodnota všech tří registrů je nulová.

a je zkratka pro "akumulátor", který se používá pro Standardní I/O. c je ukazatel kódu, je to zvláštní čítač instrukcí.[5] d je ukazatel dat. Ten se automaticky zvýší po každé instrukci, ale umístění bodů se používá pro příkazy k manipulaci s daty.

Ukazatel notace[editovat | editovat zdroj]

d může držet adresu paměti, [d] je hodnota uložená na této adrese, [c] je podobná.

Paměť[editovat | editovat zdroj]

Virtuální stroj má 59049 (310) paměťových míst. Každé místo v paměti má adresu od 0 do 59048 a může mít hodnotu od 0 do 59048.

Jazyk používá stejný paměťový prostor pro data i instrukce.

Instrukce[editovat | editovat zdroj]

Malbolge má osm pokynů. Jakou instrukci provést zjistí tím, že vezme hodnotu [c], přidá k ní hodnotu c a vezme zbytek je-li to děleno 94. Konečný výsledek říká interpretovi, co má dělat:

Instukce
Hodnota

([c] + c) % 94

Instrukce Vysvětlení
4 jmp [d] Hodnota [d] přeskočí a spustí provádění pokynů.
5 out a Vytisknutím na hodnotu a se zobrazí na obrazovce, jako ASCII znak.
23 in a Vstupy mají charakter jako ASCII kód. Nový řádek má kód 10. Konečný stav souboru je kód 59048.
39 rotr [d]

mov a, [d]

Otáčí hodnotu [d] (0002111112 se stává 2000211111). Výsledek uloží jak na [d] tak na a.
40 mov d, [d] Zkopíruje hodnotu [d] na d.
62 crz [d], a

mov a, [d]

Dělá šílený provoz (viz níže) s hodnotou [d] a hodnota a. Výsledek uloží jak na [d] tak na a.
68 nop Nic nedělá.
81 end Končí Malbolge program.
Jakékoli jiné hodnoty dělá to samé jako 68: nic. Tyto jiné hodnoty nejsou povoleny v programu.

Šílený provoz[editovat | editovat zdroj]

U každé trojice číslic z obou vstupů použijte následující tabulku, aby jste dostali trojici číslic výsledku. Například crz 0001112220, 0120120120 dává 1001022211.

Šílený provoz[6][7]
crz Vstup 2
0 1 2
Vstup 1 0 1 0 0
1 1 0 2
2 2 2 1

Šifrování[editovat | editovat zdroj]

Po instrukci hodnota [c] bude nahrazena samotným kódem 94. Poté je výsledek šifrován jednou ze dvou rovnocenných metod.

Metoda 1
Níže najdete výsledek. Uložení ASCII kódu na znak a poté na [c].
0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123
----------------------------------------------------------------------------------------------
9m<.TVac'uY*MK X~xDl}REokN:#?G"jsem@5z]&gqtyfr$(we4{WP)H-Zn,[%\3dL+Q;>U!pJS72FhOA1CB6v^=I_0/8|jsb
Metoda 2
Níže najdete výsledek. Uložení šifrované verze na [c].
Šifrování tabulky
Hodnota Šífrované Hodnota Šifrované Hodnota Šifrované Hodnota Šifrované Hodnota Šifrované
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

Reference[editovat | editovat zdroj]

V tomto článku byl použit překlad textu z článku Malbolge na anglické Wikipedii.

  1. . Dostupné online.  
  2. Programming in Malbolge.
  3. . Dostupné online.  
  4. . Dostupné online.  
  5. . Dostupné online.  
  6. TEMKIN, Daniel. Interview with Ben Olmstead [online]. 3 November 2014, [cit. 2015-06-21]. [1]. (anglicky) 
  7. IIZAWA, Hisashi. Programming Method in Obfuscated Language Malbolge [online]. Graduate School of Information Science, Nagoya University Furo-cho, Chikusa-ku, Nagoya City, Aichi, 464–8603 Japan: [cit. 2015-06-21]. [2]. (Japanese)