Interpretiere DOGO
DOGO ist eine weniger bekannte Programmiersprache. Während das ursprüngliche DOGO (eine Scherzsprache aus einem Usenet-Beitrag) nie implementiert wurde, wurde eine ähnliche Sprache erstellt. Die Befehle für die Sprache sind:
+===========+================================================================+
| Command | Description |
+===========+================================================================+
| SIT | If the value of the current memory cell is 0, jump to STAY. |
+-----------+----------------------------------------------------------------+
| STAY | If the value of the current memory cell is not 0, jump to SIT. |
+-----------+----------------------------------------------------------------+
| ROLL-OVER | Select the next operation from the operation list. |
+-----------+----------------------------------------------------------------+
| HEEL | Execute the currently selected operation. |
+-----------+----------------------------------------------------------------+
Die Operationen sind:
+========+=======================================================+====+
| Number | Description | BF |
+========+=======================================================+====+
| 0 | Increment current memory cell. | + |
+--------+-------------------------------------------------------+----+
| 1 | Decrement current memory cell. | - |
+--------+-------------------------------------------------------+----+
| 2 | Move to next memory cell. | > |
+--------+-------------------------------------------------------+----+
| 3 | Move to previous memory cell. | < |
+--------+-------------------------------------------------------+----+
| 4 | Input a byte and store it in the current memory cell. | , |
+--------+-------------------------------------------------------+----+
| 5 | Output the current memory cell as ASCII. | . |
+--------+-------------------------------------------------------+----+
Beispiele
Hallo Welt:
roll-over roll-over heel roll-over roll-over roll-over roll-over heel heel heel
heel heel heel heel heel heel sit roll-over roll-over roll-over heel roll-over
roll-over roll-over heel heel heel heel heel heel heel heel roll-over roll-over
heel roll-over roll-over roll-over roll-over roll-over heel roll-over roll-over
roll-over roll-over roll-over stay roll-over roll-over roll-over heel roll-over
roll-over heel roll-over roll-over roll-over heel roll-over roll-over roll-over
roll-over heel heel heel heel heel heel heel sit roll-over roll-over roll-over
heel roll-over roll-over roll-over heel heel heel heel roll-over roll-over heel
roll-over roll-over roll-over roll-over roll-over heel roll-over roll-over
roll-over roll-over roll-over stay roll-over roll-over roll-over heel roll-over
roll-over roll-over heel roll-over roll-over roll-over roll-over roll-over heel
roll-over heel heel heel heel heel heel heel roll-over roll-over roll-over
roll-over roll-over heel heel roll-over heel heel heel roll-over roll-over
roll-over roll-over roll-over heel roll-over roll-over roll-over heel heel heel
roll-over roll-over roll-over roll-over heel heel heel heel heel heel heel heel
sit roll-over roll-over roll-over heel roll-over roll-over roll-over heel heel
heel heel roll-over roll-over heel roll-over roll-over roll-over roll-over
roll-over heel roll-over roll-over roll-over roll-over roll-over stay roll-over
roll-over roll-over heel roll-over roll-over heel roll-over roll-over roll-over
heel heel heel roll-over roll-over roll-over roll-over heel heel heel heel heel
heel heel heel heel heel sit roll-over roll-over roll-over heel roll-over
roll-over roll-over heel heel heel heel heel heel heel heel heel roll-over
roll-over heel roll-over roll-over roll-over roll-over roll-over heel roll-over
roll-over roll-over roll-over roll-over stay roll-over roll-over roll-over heel
roll-over roll-over roll-over roll-over heel heel heel roll-over roll-over
roll-over roll-over heel roll-over roll-over roll-over roll-over heel heel heel
heel roll-over roll-over heel roll-over heel heel heel roll-over roll-over
roll-over roll-over roll-over heel roll-over roll-over heel heel heel heel heel
heel roll-over roll-over roll-over roll-over heel roll-over roll-over heel heel
heel heel heel heel heel heel roll-over roll-over roll-over roll-over heel
roll-over roll-over roll-over heel heel roll-over roll-over roll-over roll-over
heel roll-over roll-over roll-over roll-over roll-over heel
Regeln
- Jede Einreichung sollte entweder ein vollständiges Programm oder eine vollständige Funktion sein. Wenn es sich um eine Funktion handelt, muss sie ausgeführt werden können, indem nur der Funktionsaufruf am Ende des Programms hinzugefügt werden muss. Alles andere (z. B. Überschriften in C) muss enthalten sein.
- Wenn es möglich ist, geben Sie bitte einen Link zu einer Online-Site an, auf der Ihr Code getestet werden kann.
- Ihr Programm kann nichts schreiben
STDERR
(oder ähnliches). - Sie können Eingaben von
STDIN
(oder der nächstgelegenen Alternative in Ihrer Sprache) oder als Argument verwenden. - Standardlücken sind verboten.
Wertung
Programme werden nach Bytes bewertet . Der Standardzeichensatz ist UTF-8. Wenn Sie einen anderen verwenden, geben Sie dies bitte an.
Abgesehen davon ist dies Code-Golf und die niedrigste Byteanzahl wird als Gewinner gewertet!
Einsendungen
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift unter Verwendung der folgenden Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihrer Einreichung? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie dort mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder Sie die Strafen für Dolmetscherflaggen separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
# Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Sprachnamen auch zu einem Link machen, der dann im Leaderboard-Snippet angezeigt wird:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Bestenliste
Hier ist ein Stack-Snippet, mit dem Sie sowohl eine regelmäßige Rangliste als auch eine Übersicht der Gewinner nach Sprache erstellen können.
Aktualisieren:
Entschuldigen Sie, dass Sie die Befehle sit
und nicht stay
sehr gut geklärt haben. Sie sind, wie @ user6245072 sagte, wie [
und ]
in BF.
Update 2:
Um die Fragen von @ KennyLau zu klären:
- Die Standardoperation ist
0
. - Der Speicher besteht aus 8-Bit-Zellen.
- Zellen wickeln sich auf Überlauf / Unterlauf.
- Für Operation 4 ist eine Eingabe erforderlich.
quelle
sit lie-down roll-over play-dead heel
1
sagt auch "nächste Zelle inkrementieren", aber der entsprechende BF-Code lautet "aktuelle Zelle dekrementieren". Welches Verhalten ist korrekt?Antworten:
Ruby, 287 Bytes
Läuft auf einem unendlichen Band in beide Richtungen. Die DOGO-Eingabe ist eine Datei in der Befehlszeile. Wenn es kein Befehlszeilenargument gibt, funktioniert ein DOGO-Programm weiterhin, wenn es als STDIN übergeben wird, es sei denn, es verwendet eine Operation
3
(ein Byte von STDIN abrufen). In diesem Fall habe ich keine Ahnung. In jedem Fall ist die Dateieingabe am besten.Angenommen, in der Programmdatei ist kein anderer Text als die vier Befehle und Leerzeichen vorhanden.
Hallo Weltdemonstration
quelle
Python 3,
388398373371 BytesNimmt 256 Speicherzellen an. Nur eine einfache Implementierung, leicht zu schlagen, kann wahrscheinlich mehr Golf gespielt werden. Probieren Sie es auf repl.it aus .
Vielen Dank an @EasterlyIrk, dass ich festgestellt habe, dass Python 3 viel kürzer als Python 2 ist.
BEARBEITEN: Es wurde festgestellt, dass ich beim Drucken nur Über- / Unterlauf berücksichtigt habe, nicht den tatsächlichen Wert.
Vielen Dank an @ KevinLau-notKenney für das Speichern von 25 (!) Bytes mit Tricks der Listenmultiplikation und des Inversionsoperators
BEARBEITEN: -3 Bytes durch Einfügen von 256 in eine Variable, -4 Durcheinander mit Operatoren, +8 durch Sicherstellen, dass es sich um Kleinbuchstaben handelt
quelle
sys.stdout.write
? Warum nichtprint
?print(...,end='')