Malbolge

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 22 mai 2021; verificările necesită 5 modificări .

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 .

Programare în Malbolge

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.

salut lumea

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@>

Mașină virtuală

Malbolge este un limbaj de mașină pentru o mașină virtuală ( interpret ) care rulează în sistem de numere ternare .

Registre

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.

Memorie

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].

Comenzi

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:

Echipe
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țiunea nebună

Operația este analogă cu operațiile pe bit - se aplică la două cifre corespunzătoare.

operațiune nebună
crz a 2-a cifră
0 unu 2
prima cifră 0 unu 0 0
unu unu 0 2
2 2 2 unu

Criptare

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 cultura populară

Î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&

Exemple

Note

  1. Descrierea algoritmului de căutare pe site-ul Andrew Cooke (link inaccesibil) . Consultat la 25 octombrie 2010. Arhivat din original pe 18 octombrie 2010. 
  2. Postarea pe blog a lui Anthony pe Malbolge