Malbolge este un limbaj de programare ezoteric inventat de Ben Olmsted în 1998 . Limbajul este conceput pentru a fi cât mai dificil de scris posibil .
Își ia numele de la Malebolge, al optulea cerc al iadului al lui Dante .
Codul pentru primul program care a tipărit „Hello World” a fost generat de un alt program Lisp folosind o căutare în setul tuturor programelor posibile, la doi ani după apariția lui Malbolge în sine. [unu]
Pe 24 august 2000, Anthony Juhas a anunțat pe blogul său [2] 3 programe de lucru în limbajul Malbolge, scoțând expresiile „Bună, lume”, „Malbolge sucks”. și „reguli antwon.com!”.
Lou Schaeffer a produs mai târziu o criptoanaliza a limbii.
Pe 17 august 2004, Tomasz Wegrzanowski a scris un generator de programe care scoate șiruri date. Programele obținute în acest fel sunt însă mai lungi decât cele ale lui Juhas.
Acest program Malbolge afișează „ Bună, lume .”:
(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/. zHGwEDCBA@98\6543W10/.R,+O<O alta varianta:
('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#"`CB]V?Tx<uVtT`Rpo3NlF. Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>Malbolge este un limbaj de mașină pentru o mașină virtuală ( interpret ) care rulează în sistem de numere ternare .
Există trei registre în mașina virtuală Malbolge: a , c și d . Registrul c este registrul de cod folosit ca indicator la instrucțiunea curentă. Registrul d este un registru de date utilizat pentru gestionarea datelor. Register a este un acumulator, folosit și de unele comenzi pentru manipularea datelor. Când programul pornește, toate registrele sunt zero.
Dimensiunea de memorie a mașinii virtuale este de 59049 (3 10 ) celule cu numere de 10 cifre ternare . Toate celulele cu adrese de la 0 la 59048 au valori de la 0 la 59048. Toate modificările au loc modulo 59049 ( mod 59049). Când programul pornește, începutul memoriei este umplut cu coduri de caractere ASCII ale textului său sursă. Caracterele cu spații albe (spații, tab-uri, rupturi de rând etc.) sunt ignorate, iar caracterele rămase trebuie să fie comenzi Malbolge (vezi mai jos). Restul memoriei este umplut folosind operația nebună (vezi mai jos): [m] = crz [m-2], [m-1].
Există 8 comenzi în Malbolge. Mașina virtuală determină ce comandă să execute după cum urmează: valoarea celulei cu adresa c ( [c] ) se adaugă la valoarea c , iar comanda este restul împărțirii acestui număr la 94 (deoarece există 94 de caractere ). în alfabetul de intrare al limbii , coduri ASCII care de la 33 la 126). Tabelul de acțiuni al interpretului:
Valoare ([c] + c) % 94 |
Instruire | Explicaţie |
---|---|---|
patru | mov c, [d] | Accesați numărul de celule [d] . |
5 | afară a | Afișarea valorii unui caracter ASCII cu codul a % 256 pe ecran. |
23 | într-o | Introducerea unui caracter ASCII într- un . Separatorul de linii are codul 10 . Sfârșitul fișierului - 59048 . |
39 | rotr [d] mov a, [d] |
Mută valoarea lui [d] cu o cifră ternară la dreapta (000211111 2 devine 2 000211111). Rezultatul este stocat în [d] și într- un . |
40 | mov d, [d] | Copierea valorii de la [d] la d . |
62 | crz [d], a mov a, [d] |
Efectuați operația nebună (vezi mai jos) cu valorile [d] și a . Rezultatul este stocat în [d] și într- un . |
68 | nup | Facand nimic. |
81 | Sfârşit | Sfârșitul programului. |
Orice alte valori nu fac nimic. Nu sunt permise când programul este încărcat, dar sunt permise ulterior. |
După ce fiecare instrucțiune este executată, aceasta este criptată (vezi mai jos). După aceea, c și d sunt incrementate cu 1 și execuția continuă cu următoarea instrucțiune.
Operația este analogă cu operațiile pe bit - se aplică la două cifre corespunzătoare.
crz | a 2-a cifră | |||
---|---|---|---|---|
0 | unu | 2 | ||
prima cifră | 0 | unu | 0 | 0 |
unu | unu | 0 | 2 | |
2 | 2 | 2 | unu |
După ce următoarea instrucțiune este executată, instrucțiunea este criptată folosind următorul tabel de traducere (dacă este unul dintre caracterele posibile ale limbii):
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 5z]&gqtyfr$(we4{WP)H-Zn,[%\3dL+Q;>U!pJS72FhOA1CB6v^=I_0/8|jsb9m<.TVac`uY*MK'X~xDl}REokN:#?G"i @adică !devine 5etc.
În cel de-al 10-lea episod al primului sezon din Elementary , dovezile cheie în rezolvarea crimei au fost o bucată de hârtie, pe o parte a căreia era tipărit codul programului Malbolge (care este o copie inexactă a programului Hello World de mai sus) și pe cealaltă parte era o comandă de cafea.
'&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPlNdibaf_dcbaZ~A]\Uy<XW PtTSRQ3IHMFjDCHA@d'&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMc hgfedcb[`_X|?>=<;:9OTMLQPONMFj-,+*)('CB;@9>=<;4Xyxwvutsrqponmlkjihgfedcba`_^ ]\[ZYXWVUTSRQPONMLKJIHGFEDCB^]\[Z<XWPOTSLpPON0Fj-,+*)('&%$#"!~}|{zyxwvutsrqp onmlkjihgfedcba`_^]\[ZYXWVUTponPfkjihafe^$bD`YX]VzZYXW9UTSLp3OHl/.-,+*)('&%$ #"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVlqponmlkjchg`&G]ba`YX|?>=<;:9OTM RQPONMFj-,+*)('&%$#"!~}|{zyxwvutsrqponm+*)('&%$#cb~`=^]sxqputsrqj0hg-NMLKJIH GFEDCBA@?>=YXW9ONSLQPOHlLKDCg*)('&%A#?>7<;:981U5432r*N.-,l$H"'&}C#cy~}vu;s9&
Limbaje de programare | |
---|---|
|