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 .
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.
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@>Malbolge är ett maskinspråk för en virtuell maskin ( tolk ) som körs i ternärt nummersystem .
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.
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].
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:
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.
Operationen är analog med bitvisa operationer - den tillämpas på två motsvarande siffror.
crz | 2:a siffran | |||
---|---|---|---|---|
0 | ett | 2 | ||
1:a siffran | 0 | ett | 0 | 0 |
ett | ett | 0 | 2 | |
2 | 2 | 2 | ett |
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 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&
Programmeringsspråk | |
---|---|
|