Malbolge

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 22 maj 2021; kontroller kräver 5 redigeringar .

Malbolge  är ett esoteriskt programmeringsspråk som uppfanns av Ben Olmsted 1998 . Språket är utformat för att vara så svårt att skriva program som möjligt .

Den har fått sitt namn från Malebolge, Dantes åttonde helvetescirkel .

Programmering i Malbolge

Koden för det första programmet att skriva ut "Hello World" genererades av ett annat Lisp - program med en sökning i uppsättningen av alla möjliga program, två år efter att Malbolge själv dök upp. [ett]

Den 24 augusti 2000 tillkännagav Anthony Juhas i sin blogg [2] 3 fungerande program på Malbolge-språket, som matade ut fraserna "Hej världen.", "Malbolge suger." och "antwon.com regler!".

Lou Schaeffer producerade senare en kryptoanalys av språket.

Den 17 augusti 2004 skrev Tomasz Wegrzanowski en programgenerator som matar ut givna strängar. De program som erhålls på detta sätt är dock längre än Juhas.

hej världen

Detta Malbolge-program visar " Hej, värld .":

(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/. zHGwEDCBA@98\6543W10/.R,+O<

En annan variant:

('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#"`CB]V?Tx<uVtT`Rpo3NlF. Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>

Virtuell maskin

Malbolge är ett maskinspråk för en virtuell maskin ( tolk ) som körs i ternärt nummersystem .

Register

Det finns tre register i Malbolge virtuella maskin: a , c och d . c - registret  är kodregistret som används som en pekare till den aktuella instruktionen. Register d  är ett dataregister som används för att hantera data. Register a  är en ackumulator, som också används av vissa kommandon för att manipulera data. När programmet startar är alla register noll.

Minne

Minnesstorleken för den virtuella maskinen är 59049 (3 10 ) celler med nummer på 10 ternära siffror . Alla celler med adresser från 0 till 59048 har värden från 0 till 59048. Alla ändringar sker modulo 59049 ( mod 59049). När programmet startar fylls början av minnet med ASCII-teckenkoder för dess källtext. Blanktecken (mellanslag, tabbar, radbrytningar, etc.) ignoreras, och de återstående tecknen måste vara Malbolge-kommandon (se nedan). Resten av minnet fylls med den galna operationen (se nedan): [m] = crz [m-2], [m-1].

Kommandon

Det finns 8 kommandon i Malbolge. Den virtuella maskinen bestämmer vilket kommando som ska utföras enligt följande: värdet på cellen med adressen c ( [c] ) läggs till värdet c , och kommandot är resten av att dividera detta tal med 94 (eftersom det finns 94 tecken i språkets inmatningsalfabet , ASCII- koder som från den 33:e till den 126:e). Tolkåtgärdstabell:

Lag
Värde
([c] + c) % 94
Instruktion Förklaring
fyra mov c, [d] Gå till cellnummer [d] .
5 ut a Visar värdet på ett ASCII -tecken med koden a  % 256 på skärmen.
23 i en Ange ett ASCII- tecken i en . Radavskiljaren har kod 10 . Slut på filen - 59048 .
39 rotr [d]
mov a, [d]
Skiftar värdet på [d] en ternär siffra åt höger (000211111 2 blir 2 000211111). Resultatet lagras i [d] och i en .
40 mov d, [d] Kopiera värdet från [d] till d .
62 crz [d], a
mov a, [d]
Utför den galna operationen (se nedan) med värdena [d] och a . Resultatet lagras i [d] och i en .
68 nej Gör inget.
81 slutet Slut på programmet.
Alla andra värden gör ingenting. De är inte tillåtna när programmet laddas, men är tillåtna i efterhand.

Efter att varje instruktion har körts krypteras den (se nedan). Därefter ökas c och d med 1 och exekveringen fortsätter med nästa instruktion.

Operation crazy

Operationen är analog med bitvisa operationer - den tillämpas på två motsvarande siffror.

operation galen
crz 2:a siffran
0 ett 2
1:a siffran 0 ett 0 0
ett ett 0 2
2 2 2 ett

Kryptering

Efter att nästa instruktion har utförts krypteras instruktionen med hjälp av följande översättningstabell (om det är ett av språkets möjliga tecken):

!"#$%&'()*+,-./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 @

dvs !blir 5osv.

I populärkulturen

I det 10:e avsnittet av den första säsongen av Elementary var nyckelbeviset för att lösa brottet ett papper, på vars ena sida var tryckt Malbolge-programkoden (som är en felaktig kopia av Hello World-programmet ovan), och på andra sidan låg en beställning på kaffe.

'&%$#"!~}|{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&

Exempel

Anteckningar

  1. Beskrivning av sökalgoritmen på Andrew Cookes webbplats (otillgänglig länk) . Hämtad 25 oktober 2010. Arkiverad från originalet 18 oktober 2010. 
  2. Anthonys blogginlägg på Malbolge