Malbolge: Porovnání verzí
m editace uživatele 185.153.195.53 (diskuse) vráceny do předchozího stavu, jehož autorem je OJJ značka: rychlé vrácení zpět |
m zkopírování neúplných referencí ze zdroje překladu |
||
(Není zobrazeno 18 mezilehlých verzí od 10 dalších uživatelů.) | |||
Řádek 9: | Řádek 9: | ||
Později, Lou Scheffer zaslal [[Kryptoanalýza|dešifrování]] k Malbolge a poskytl program pro kopírování jeho vstupu na jeho výstup.<ref>[http://www.lscheffer.com/malbolge.shtml Programming in Malbolge]. </ref> 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. |
Později, Lou Scheffer zaslal [[Kryptoanalýza|dešifrování]] k Malbolge a poskytl program pro kopírování jeho vstupu na jeho výstup.<ref>[http://www.lscheffer.com/malbolge.shtml Programming in Malbolge]. </ref> 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.<ref>{{ |
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.<ref>{{cite web|url=http://www.99-bottles-of-beer.net/language-malbolge-995.html |title=Language Malbolge |publisher=99 Bottles of Beer |date= |accessdate=2012-11-06}}</ref> Hisashi Lizawa také navrhl průvodce pro programování v Malbolge. |
||
== Příklad Programu == |
== Příklad Programu == |
||
=== Ahoj světe! === |
=== Ahoj světe! === |
||
Tento program zobrazuje |
Tento program zobrazuje „[[Hello world|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. |
(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc. |
||
Řádek 20: | Řádek 20: | ||
Tento program čte řetězec od uživatele a vypíše tento řetězec. |
Tento program čte řetězec od uživatele a vypíše tento řetězec. |
||
(=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/. |
(=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/. |
||
~P< |
~P<8 |
||
<:(8& |
<:(8& |
||
66#"!~}|{zyxwvu |
66#"!~}|{zyxwvu |
||
Řádek 28: | Řádek 28: | ||
Malbolge je [[Strojový kód|programovací jazyk]] pro [[Trojková soustava|ternární]] [[virtuální stroj]]. |
Malbolge je [[Strojový kód|programovací jazyk]] pro [[Trojková soustava|ternární]] [[virtuální stroj]]. |
||
Standardní interpretace a oficiální specifikace neodpovídají dokonale.<ref>{{ |
Standardní interpretace a oficiální specifikace neodpovídají dokonale.<ref>{{Cite web|title = Malbolge|url = http://www2.latech.edu/~acm/helloworld/malbolge.html|website = www2.latech.edu|accessdate = 2015-06-21|last = Green|first = Austin}}</ref> 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 === |
=== Registry === |
||
Malbolge má tři [[Registr procesoru|registry]] '''''a''''', '''''c''''' a '''''d'''''. Když program začíná, hodnota všech tří registrů je nulová. |
Malbolge má tři [[Registr procesoru|registry]] '''''a''''', '''''c''''' a '''''d'''''. Když program začíná, hodnota všech tří registrů je nulová. |
||
'''''a''''' je zkratka pro |
'''''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í]].<ref>{{Cite web|title = Malbolge Specification|url = http://www.lscheffer.com/malbolge_spec.html|website = www.lscheffer.com|accessdate = 2015-06-21|last = Olmstead|first = Ben|date = 1998}}</ref> '''''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 === |
=== Ukazatel notace === |
||
Řádek 53: | Řádek 53: | ||
|- |
|- |
||
! 4 |
! 4 |
||
| jmp [ |
| jmp [q] |
||
| style="text-align:left;" | Hodnota '''[ |
| style="text-align:left;" | Hodnota '''[q]''' přeskočí a spustí provádění pokynů. |
||
|- |
|- |
||
! 5 |
! 5 |
||
Řádek 65: | Řádek 65: | ||
|- |
|- |
||
! 39 |
! 39 |
||
| rotr [ |
| rotr [s] |
||
mov a, [ |
mov a, [s] |
||
| style="text-align:left;" | Otáčí hodnotu '''[d]''' (0002111069 se stává '''2'''000211169). Výsledek uloží jak na '''[d]''' tak na '''a'''. |
| style="text-align:left;" | Otáčí hodnotu '''[d]''' (0002111069 se stává '''2'''000211169). Výsledek uloží jak na '''[d]''' tak na '''a'''. |
||
|- |
|- |
||
Řádek 349: | Řádek 349: | ||
|} |
|} |
||
== |
== Odkazy == |
||
=== Externí odkazy === |
|||
* {{Commonscat}} |
|||
=== Reference === |
|||
{{Překlad|en|Malbolge|758717056}} |
{{Překlad|en|Malbolge|758717056}} |
||
<references /> |
<references /> |
Aktuální verze z 21. 6. 2024, 21:34
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)