Betrifft: Markscript

Innen Turing-mächtig, außen eigenwillige Streifen.

Dieses Modul ist ein Computer, der aus einem Bildschirm, einem roten Netzschalter und einer Tastatur besteht. Es gilt, eine Programmieraufgabe zu implementieren. Um das Modul zu entschärfen, muss ein Programm geschreiben und ausgeführt werden, das die Aufgabe erfüllt. Dieses Modul verzeichnet keine Fehler.

Die Taste wechselt zwischen Programmier- und Aufgabenmodus. Der Aufgabenmodus zeigt eine Beschreibung des geforderten Programms an.

Mit dem Netzschalters kann im Programmiermodus das Programm ausgeführt werden. Erneutes Drücken während der Ausführung des Programms bricht es ab.

Fast alle Tastaturtasten — einschließlich der, die wie ein Tetris-Z aussieht — fügen das auf der Taste angezeigte Zeichen an die aktuelle Zeile an. Die Ausnahmen sind unten aufgeführt.

  • : Modus wechseln. Im Aufgabenmodus sind die übrigen Tasten inoperabel.
  • : Entfernt das letzte Zeichen aus der aktuellen Zeile. Dies ist nicht möglich, wenn das zu entfernende Zeichen ein ? ist.
  • , : Bewegt den Cursor zur vorherigen bzw. nächsten Zeile.

Die echte Tastatur kann auch zum Tippen verwendet werden. Buchstaben, Leerzeichen, Rücktaste und Pfeiltasten funktionieren wie erwartet. Eingabe und Zahlen funktionieren ohne die Umschalttaste normal. Die folgende Tabelle zeigt, was die Tasten bei gedrückter Umschalttaste eingeben. Die NumLock-Taste ist bei der physischen Tastatur zu beachten.

12345678Eingabe
«

Das Programm wird, nicht verwunderlich, in einer Sprache namens Markscript geschrieben, deren Dokumentation unten bereitgestellt wird. Die in der Aufgabe vorhandenen Variablen erhalten vor der Ausführung des Programms automatisch Werte. Das Modul ist entschärft, wenn fünfmal hintereinander das richtige Ergebnis ausgegeben wird. Bei einem falschen Ergebnis oder einem Syntaxfehler zeigt der Bildschirm das Problem an und das Programm wird angehalten. Mit kann von diesem Zustand in den Programmiermodus zurückgekehrt werden.

Programme in dieser Sprache führen die Zeilen in der Regeln von oben nach unten der Reihe nach aus. Sofern unten nicht anders angegeben, wird nach einer Zeile zur darunter liegenden Zeile gesprungen.

Kommentare können dem Programmierer helfen, Codeabschnitte zu erläutern, und werden bei der Ausführung in der Regel ignoriert. Kommentare können mit einem « am Ende einer Zeile angefügt werden. Kommentare dürfen keine Leerzeichen oder Ziffern enthalten, und es wird empfohlen denselben Kommentar nicht mehrmals zu verwenden. Pro Zeile ist nur ein Kommentar erlaubt.

Syntax: [Code] «[Kommentar]
Beispiele: ♫0 «FERTIG, ₪NIX «NIX, ☼X 21 «MEME, ZEUGS√ 47 «USW

Variablen werden verwendet, um numerische Daten zu speichern und später wieder abzurufen. Variablen werden deklariert mit einem gefolgt von einem Variablennamen, dann einem Leerzeichen, dann einem numerischen Wert oder dem Namen einer bereits deklarierten Variablen. Eine Variable kann nicht mit einem bereits vorhandenen Namen deklariert werden. Um einer bereits deklarierten Variablen einen Wert zuzuweisen, muss das nach dem Variablennamen stehen. Zum Zuweisen von negativen Zahlen kann als Vorzeichen verwendet werden. Das ist nicht mit Variablennamen möglich.

Syntax: √[Name] [Wert]
Beispiele: √SECHS 7, SECHS√ 6 «UPS, √KOPIE ORIG, √MINUSEINS ♣1

If-Anweisungen dienen zum Überprüfen einer Bedingung. Eine If-Anweisung beginnt mit , gefolgt von einem Variablennamen, dann einem Leerzeichen, dann einem der folgenden Vergleichsoperatoren, und dann dem Vergleichswert. Operatoren sind: = kleiner als, ∩∩ = gleich, und ♣∩ = größer als. Ist die Bedingung wahr, wird die nächste Codezeile übersprungen.

Syntax: ◊[Name] [Operator][Wert]
Beispiele: ◊ZAHL ∩∩0, ◊HMM ∩♣10, ◊GROSS ♣∩MILLION, ◊ANTWORT ∩42

Sprünge dienen dazu, zu anderen Teilen des Programms zu wechseln. Ein Sprung beginnt mit einem , gefolgt von dem Kommentar, zu dem gesprungen werden soll. Haben mehrere Zeilen denselben Kommentar, wird der oberste verwendet.

Syntax: ₪[Kommentar]
Beispiele: ₪ANFANG, ₪RETOUR, ₪NACHVORN, ₪TEILEINS «TEILZWEI

Addition ist die einzige direkt verfügbare arithmetische Operation. Eine Addition beginnt mit einem , gefolgt von einem Variablennamen, dann einem Leerzeichen, dann dem Wert, der addiert werden soll. Das Ergebnis der Addition wird derselben Variablen zugewiesen.

Syntax: ☼[Name] [Wert]
Beispiele: ☼KLEIN 100, ☼KLAR GEHTDAS, ☼DOPP DOPP, ☼TIPP ♣1

Rückgabe-Anweisungen werden verwendet, um das Programm mit einem bestimmten Ausgabewert zu beenden. Eine Rückgabe-Anweisung beginnt mit einem , gefolgt vom Ausgabewert. Bei einem falschen Rückgabewert wird das Programm abgelehnt.

Syntax: ♫[Wert]
Beispiele: ♫0, ♫AUCHVARIABLENGEHEN, ♫♣1, ♫1 «FERTIG