Malbolge
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, Malbolge.
Malbolge byl navržen tak, aby bylo téměř nemožné ho používat kvůli neintuitivním „šíleným operacím“ a samo modifikujícímu se kódu. Navazuje na obtížnost časnějších, náročných ezoterických jazyků (jako je Brainfuck a Befunge), ale bere tento aspekt do extrému, pohrává si se spletitou minulostí 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 člověkem, 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 je možné 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 Lizawana v roce 2005.[3] Hisashi Lizawa 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ísmenem 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.
(=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/. ~P<8 <:(8& 66#"!~}|{zyxwvu gJ%
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:
Hodnota
([c] + c) % 94 |
Instrukce | Vysvětlení |
---|---|---|
4 | jmp [q] | Hodnota [q] 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 [s]
mov a, [s] |
Otáčí hodnotu [d] (0002111069 se stává 2000211169). Výsledek uloží jak na [d] tak na a. |
40 | mov d, [c] | Zkopíruje hodnotu [d] na c. |
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é dvojice ternárních číslic z obou vstupů provede operaci dle následující tabulky. Například crz 0001112220, 0120120120 dává 1001022211.
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].
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 |
Odkazy
[editovat | editovat zdroj]Externí odkazy
[editovat | editovat zdroj]- Obrázky, zvuky či videa k tématu Malbolge na Wikimedia Commons
Reference
[editovat | editovat zdroj]V tomto článku byl použit překlad textu z článku Malbolge na anglické Wikipedii.
- ↑ Archivovaná kopie [online]. [cit. 2017-01-09]. Dostupné v archivu pořízeném dne 2017-07-02.
- ↑ Programming in Malbolge.
- ↑ Language Malbolge [online]. 99 Bottles of Beer [cit. 2012-11-06]. Dostupné online.
- ↑ GREEN, Austin. Malbolge [online]. [cit. 2015-06-21]. Dostupné online.
- ↑ OLMSTEAD, Ben. Malbolge Specification [online]. 1998 [cit. 2015-06-21]. Dostupné online.
- ↑ TEMKIN, Daniel. Interview with Ben Olmstead [online]. 3 November 2014 [cit. 2015-06-21]. Dostupné v archivu pořízeném dne 2016-10-18.
- ↑ 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]. Dostupné online. (Japanese)