Malbolge

Malbolge ist ein öffentliches Gebiet esoterische Programmiersprache, die von Ben Olmstead 1998 erfunden ist, genannt nach dem achten Kreis der Hölle im Inferno von Dante, Malebolge.

Die Besonderheit von Malbolge ist, dass er spezifisch entworfen wurde, um unmöglich zu sein, nützliche Programme darin zu schreiben. Jedoch sind Schwächen in diesem Design gefunden worden, dass es möglich (obwohl noch sehr schwierig) machen, um Programme von Malbolge auf eine organisierte Mode zu schreiben.

Programmierung in Malbolge

Malbolge war so schwierig zu verstehen, als er angekommen ist, dass man zwei Jahre für das erste Programm von Malbolge gebraucht hat, um zu erscheinen. Das Programm wurde von einem Menschen nicht sogar geschrieben: Es wurde durch einen Balken-Suchalgorithmus erzeugt, der von Andrew Cooke entworfen ist, und hat im Lispeln durchgeführt.

Später hat Lou Scheffer einen cryptanalysis von Malbolge angeschlagen und hat ein Programm zur Verfügung gestellt, um seinen Eingang zu seiner Produktion zu kopieren.

Olmstead hat geglaubt, dass Malbolge ein geradliniger begrenzter Automat war. Es gibt eine interessantere Diskussion darüber, ob man vernünftige Schleifen in Malbolge durchführen kann - hat er viele Jahre genommen, bevor das erste Nichtbegrenzen von demjenigen eingeführt wurde. Richtige 99 Flaschen des Bierprogramms, das sich mit nichttrivialen Schleifen und Bedingungen befasst, wurden seit sieben Jahren nicht bekannt gegeben; der erste richtige war durch Hisashi Iizawa 2005.

"Hallo Welt" in Malbolge

Dieses Malbolge Programm zeigt "Hallo Welt!", mit der vollen Kapitalisierung und dem Ausrufungszeichen am Ende.

('&%:9]! ~} |z2vxwv-, POqponl$Hjig%eB @@>} =

Vereinfachte Tätigkeit von Malbolge

Malbolge ist Maschinensprache für eine dreifältige virtuelle Maschine, den Dolmetscher von Malbolge. Im Schreiben von Programmen von Malbolge zu helfen, die richtig, die Weise laufen, wie die Standarddolmetscher-Arbeiten unten beschrieben werden.

Zeichen

  • Der Standarddolmetscher und die offizielle Spezifizierung passen vollkommen nicht zusammen.
  • Das ist eine vereinfachte Erklärung des Dolmetscher-Quellcodes: Es begegnet nutzlose Verschlüsselung, und Subtraktion geht und führt eine Zusammenbau-Sprache ein.

Register

Malbolge hat drei Register, a, c, und d. Wenn ein Programm anfängt, ist der Wert aller drei Register Null. c ist speziell: Es weist zur aktuellen Instruktion hin.

Zeigestock-Notation

d kann eine Speicheradresse halten; [d] ist der an dieser Adresse versorgte Wert. [c] ist ähnlich.

Gedächtnis

Die virtuelle Maschine hat 59049 (3) Speicherpositionen, die jeder eine zehnstellige dreifältige Zahl halten können. Jede Speicherposition hat eine Adresse von 0 bis 59048 und kann einen Wert von 0 bis 59048 halten. Das Erhöhen vorbei an dieser Grenze hüllt sich zurück zur Null ein.

Vor einem Programm von Malbolge Anfänge wird der erste Teil des Gedächtnisses mit dem Programm gefüllt. Der ganze whitespace im Programm wird ignoriert und, um Programmierung schwieriger zu machen, etwas anderes im Programm muss als eine der Instruktionen unten aufbrechen.

Der Rest des Gedächtnisses wird durch das Verwenden der verrückten Operation (sieh unten) auf den vorherigen zwei Adressen ([M] = crz [M - 2], [M - 1]) gefüllt. Gedächtnis hat sich gefüllt dieser Weg wird alle zwölf Adressen wiederholen (die individuellen dreifältigen Ziffern werden alle drei oder vier Adressen wiederholen, so, wie man versichert, wiederholt eine Gruppe von dreifältigen Ziffern alle zwölf).

Instruktionen

Malbolge hat acht Instruktionen. Malbolge beläuft sich, welche Instruktion, durch die Einnahme des Werts an [c], das Hinzufügen des Werts von c dazu und die Einnahme des Rests durchzuführen, wenn das durch 94 geteilt wird. Das Endresultat erzählt dem Dolmetscher, was man tut:

Nachdem jede Instruktion durchgeführt wird, bekommt die schuldige Instruktion encrypted (sieh unten), so dass es nächstes Mal nicht dasselbe machen wird, wenn ein Sprung gerade nicht geschehen ist. Direkt nach einem Sprung wird Malbolge encrypt die unschuldige Instruktion gerade vor derjenigen, zu der es stattdessen gesprungen ist. Dann werden die Werte sowohl von c als auch von d von einem vergrößert, und die folgende Instruktion wird durchgeführt.

Verrückte Operation

Für jede dreifältige Ziffer von beiden Eingängen, verwenden Sie den folgenden Tisch, um eine dreifältige Ziffer des Ergebnisses zu bekommen. Zum Beispiel, crz 0001112220, 0120120120 gibt 1001022211.

Verschlüsselung

Nachdem eine Instruktion durchgeführt wird, wird der Wert an [c] (ohne irgendetwas Hinzugefügtes dazu) durch sich mod 94 ersetzt. Dann ist das Ergebnis encrypted mit einer der folgenden zwei gleichwertigen Methoden.

Methode 1

Finden Sie das Ergebnis unten. Versorgen Sie den ASCII Code des Charakters darunter an [c].

0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123 ----------------------------------------------------------------------------------------------

Methode 2

Finden Sie das Ergebnis unten. Versorgen Sie die encrypted Version an [c].

Zyklen in der Verschlüsselung

Der cryptanalysis von Lou Scheffer von Malbolge erwähnt sechs verschiedene Zyklen in der Verschlüsselung. Sie werden hier verzeichnet:

  • 33  53  45  119  78  49  87  48  123  71  83  94  57  91  106  77  65  59  92  115  82  118  107  75  104  89  56  44  40  121  35  93  98  84  61  100  97  46  101  99  86  95  109  88  47  52  72  55  110  126  64  81  54  90  124  34  122  63  43  36  38  113  108  39  116  69  112  68  33...
  • 37  103  117  111  120  58  37...
  • 41  102  96  60  51  41...
  • 42  114  125  105  42...
  • 50  80  66  62  76  79  67  85  73  50...
  • 70  74  70...

Diese Zyklen können verwendet werden, um Schleifen zu schaffen, die verschiedene Sachen jedes Mal machen, und die schließlich wiederholend werden. Lou Scheffer hat diese Idee verwendet, ein Programm von Malbolge zu schaffen (eingeschlossen in seinen cryptanalysis, der unten verbunden ist), der irgendetwas die Benutzereingänge wiederholt.

Varianten

Malbolge, ist wegen seiner Speichergrenzen nicht Turing-abgeschlossen. Mehrere Versuche sind gemacht worden, Turing-ganze Versionen von Malbolge zu schaffen.

  • Malbolge-T ist eine theoretische Version von Malbolge, der den Strom des Eingangs/Produktion nach dem Erreichen des Endes neu fasst, unbegrenzte Programme berücksichtigend. Programme von Malbolge würden in Malbolge-T gültig sein.
  • Befreiter Malbolge ist eine Turing-ganze Schwankung, Programme jeder Länge berücksichtigend. Jedoch, erwartet, Schwankungen zu befehlen, Werte oben 257 zu berücksichtigen, werden gültige Programme von Malbolge richtig in Befreitem Malbolge nicht notwendigerweise laufen.

Siehe auch

Links


Gotteseingreifen (Album) / Kollaboration von Cochrane
Impressum & Datenschutz