Malbolge
STOP DAVID.V 😡🔫
Příklad Programu
Ahoj světe!
I love biches.
(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc.
CAT Program
Raideeeeeed
Design
Malbolge je programovací jazyk pro ternární virtuální stroj.
Standardní interpretace a oficiální specifikace neodpovídají dokonale.[1] 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.
Me: 🔫
David V.: 😭😭😭
Ukazatel notace
d může držet adresu paměti, [d] je hodnota uložená na této adrese, [c] je podobná.
Ve jmeno otce syna a ducha svateho posilam Davida V. Do pekel
Instrukce
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 [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] (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
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í
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 |
Reference
V tomto článku byl použit překlad textu z článku Malbolge na anglické Wikipedii.
- ↑ 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)