Volatile interpretieren
Volatile ist ein stapelbasierter Esolang von A_ / a '_' / A, der nur 8 Anweisungen enthält und vollständig ist. Es ist jedoch auch nicht deterministisch ... was bedeutet, dass Programme nicht immer die gleiche Ausgabe liefern. Ihre Aufgabe ist es, diese Sprache zu interpretieren.
Sprachspezifikationen
Entnommen von der Esolangs-Seite:
~: Push a random integer in any range of integers. Minimum range of 0 through 32768
+: Pop 2 values and push the sum of the 2 values
-: Like +, but subtracts
*: Multiply
/: Divide. 0-division will result in an error.
:: Duplicate the top of the stack
.: Output the top of the stack without popping it
(...): Execute ... inside a while loop when the top of the stack is not 0
Alles andere wird ignoriert
Eingang
Beachten Sie, dass diese Programme möglicherweise zufällig fehlschlagen
~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++.~:/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/:::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++.~:/::::::::::++++++++++.
~:-.~:/+.(~:/+.)
~:-:/
Ausgabe
73 102 109 109 112 45 33 120 112 115 109 101 34 11
0 1 2 3 4 5 6 7 8 9 ...
<Any Error Message>
Weitere Beispiele sowie eine Referenzimplementierung (verwenden Sie die zweite unter (Ein anderer) Python 3-Interpreter ) finden Sie unter https://esolangs.org/wiki/Volatile
Wertung
Dies ist Code-Golf, also gewinnt die kürzeste Antwort in Bytes
Bestenlisten
Hier ist ein Stack-Snippet, mit dem Sie sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache erstellen können.
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
quelle
~
eine ganze Zahl oder eine beliebige Zahl?1
, die sich durch Null teilen könnte.~
muss in der Lage sein, Null zu drücken, sonst ist es deterministisch. Außerdem muss das RNG immer in der Lage sein, nach einer beliebigen Anzahl von Nullen in einer Reihe Null zurückzugeben.~:-.~:/+.(~:/+.)
von starten0 1 2 ...
statt1 2 3 ...
? Das~:-.
würde zu 0 führen, die es ausgibt. Diese Dolmetscher auf der Esolang-Seite scheinen dies zu bestätigen ( hier die zweite ).~:-.(~:/+.)
Antworten:
05AB1E , 35 Bytes
Probieren Sie es online aus!
Transpiliert flüchtigen Code in 05AB1E und wertet ihn dann aus.
*
,+
Und-
kann wie sie ist gelassen werden.:
,.
Und)
haben einen direkten Ein-Byte - Äquivalent. Die anderen Befehle benötigen jeweils einige Bytes. Leider stürzt 05AB1E bei der Division durch 0 nicht ab, sodass dies stattdessen durch ein bedingtes "Beenden, wenn der Stapel oben ist == 0" implementiert wird.quelle
0
und1
korrekt zu sein, aber dann beginnt er mit der Ausgabe des Volatile-Programms (der impliziten Eingabe) selbst. Ich mag dieseD Doingõq
Wörterbuchzeichenfolge für die if-Anweisung, übrigens! :)while peek
, aber im Referenzinterpreter ist es einewhile pop
. Das Beispiel kann durch Hinzufügen einiger:
( TIO ) behoben werden . Alternativ kann mein Codewhile peek
durch Hinzufügen von a in a geändert werdenD
.0 1 2 3 ...
. Ich habe mir ihren Quellcode nicht angesehen, sondern nur beide ausprobiert.D
in meinen Code eingefügt .replace
vsreplaceAll
(die beide alle Vorkommen ersetzen, aber diereplaceAll
regulären Ausdrücke verwenden und die andere nicht). xDJulia 1.0 , 334 Bytes
Mein erster "Dolmetscher" jeglicher Art war einfacher als ich erwartet hatte. Ich habe ein bisschen Golf gespielt, aber es gibt wahrscheinlich Platz für mehr. Ich habe es ein Leerzeichen nach der Ausgabe für drucken lassen. zu Beispielausgabe machen. Die ungolfed Version befindet sich in der Kopfzeile des TIO-Links. Anwendungsbeispiel
v("~:-:/")
.+41 Bytes zur Behebung des Fehlers, auf den Night2 durch Hinzufügen eines Schleifenzählers hingewiesen hat. Jetzt verstehe ich, warum Transpiling eine gute Option ist. Ein guter Testfall ist
~:-.(~:/+.)(~:/+.())~:-.
mit erwarteter Leistung0 0
Probieren Sie es online aus!
quelle
Runenverzauberungen ,
266264 BytesProbieren Sie es online aus!
Aufgrund der in Runic integrierten Einschränkungen können nur Programmlängen (und Stapelgrößen) von ~ 50 1 unterstützt werden . Zu große Programme schlagen einfach fehl. Wenn der Stapel zu groß wird, tritt ein Fehler auf
SO!
(war nicht erforderlich, war aber besser als eine stille Beendigung; kostet 24 Byte). Wenn das Programm versucht, durch 0 zu teilen, wird es gedruckt/0!
.Fehler werden an das Ende der Standardausgabe angehängt, da Runic nicht in STDERR schreiben kann.
Diese Version unterstützt beliebig lange Programme, ist jedoch immer noch auf einen Stapel von ~ 90 beschränkt (und führt daher zu Fehlern beim 2. Ergebnis des ersten Testprogramms) und wurde nicht sehr gut gespielt (die Erhöhung der Befehlslänge zwischen
S͗}:
undS͗}͍:0%:
erforderte einige zusätzlicher Abstand, um Abschnitte auszurichten, aber dieser zusätzliche Platz ermöglichte auch mehr<
für eine größere maximale Stapelgröße).Alternativ vermeidet dieses Programm das
~
Generieren einer Null und das Programm wird nach 1 Million Ausführungsschritten beendet (ein Schutz gegen Endlosschleifen, die in den Runeninterpreter eingebaut sind). Enthält auch einige Bytes, um überschüssigen NOP-Speicherplatz zu überspringen und etwas länger zu laufen.sizeof(stack) < mana
und es gibt 5 IPs, die ihr Mana zusammenführen und kombinieren (50 Initialen). Das Erhöhen dieses Wertes auf das wahre Limit (+10) würde weitere 2 Bytes kosten, und ich habe die Logik nicht genau, sondern golfig gelassen.Erläuterung
<<<<<
und die fünf IPs werden am zusammengeführty
~
oder bei einem Befehl:
zum Fehler beim Stapelüberlauf ausgeführt. Der gelbe Abschnitt wird übersprungen, wenn der Stapel nicht überfüllt ist, und kehrt über den Umlauf in das Dunkelblau zurück.)
gefunden wird, verzweigt sich das Programm in den roten Bereich und bewegt sich nach rechts.(
gefunden wird (weiter grün).)
gefunden wird (weiter orange), der Stapeltiefenstapel wird gestoßen, und wenn a(
gefunden wird, wird der Stapeltiefenstapel einmal geplatzt (dunkelgrüner und orangefarbener Wiedereintritt fortfahren).B
und kehren Sie zu Cyan zur Hauptparsing-Schleife zurück. Andernfalls wickeln Sie über Orange-> Gelb-> Rot (erneutes Aufrufen der Loop-Reset-Schleife).quelle
PHP , 196 Bytes
Eingabe 1: Probieren Sie es online aus!
Eingabe 2 (0, 1, 2, ...): Probieren Sie es online aus!
Eingabe 3 (Fehler durch Division durch Null): Probieren Sie es online aus!
Übersetzt einfach den Code in PHP und wertet ihn aus!
quelle
JavaScript (V8) ,
178 172171 BytesTranspiles zu JS. Kann entweder werfen
Z is not defined
oderx is not defined
wenn der Code versucht, etwas Schlechtes zu tun.Probieren Sie das 1. Programm online aus!
Probieren Sie das 2. Programm online aus!
Probieren Sie das 3. Programm online aus!
Wie?
Jede Anweisung wird transpiliert
S.push(
, gefolgt von einem bestimmten Muster, gefolgt von);
.Wir müssen die Division durch Null explizit testen, weil JS sich nicht im geringsten um eine so harmlose Operation kümmert. :-p
quelle
Java 8,
420418402373359357341 Bytes-2 Bytes dank @Grimy .
-16 Bytes dank @ceilingcat .
Probieren Sie es online aus.
Erläuterung:
quelle
new Random().nextInt()
ist 2 kürzer als(int)(Math.random()*1e5)
.java.util.*
Import für die hatteStack
. Vielen Dank! :)new Random().nextInt()
mit5
allen Testfällen noch passieren.5
nicht gerade zufällig ;) Relevante xkcdC (gcc) für Linux x86_64,
675 643 621 613 597 432 404399 ByteProbieren Sie es online aus!
Dies ist eine JIT, die flüchtige Anweisungen direkt in die Maschinensprache x86_64 übersetzt und den Code ausführt. Wenn Ihr Rechner die nicht hat
rdrand
Anweisung, können Sie ersetzenL"\xf0c70f50"
mit"Pj*X"
einem „ weniger einheitlich PRNG “. Um den Port auf etwas anderes als Linux, ersetzen Sie die syscalls in denprintf()
undexit()
Kleckse und Einstellen von Parametern zummap()
.BEARBEITEN: Diese Version ruft auf,
printf()
anstatt eine Teilmenge von Grund auf neu zu implementieren.EDIT2: Unterstützte Ganzzahlen sind jetzt 32 Bit statt 64.
Etwas weniger Golf ...
quelle
Kotlin , 412 Bytes
Leider habe ich gegen Java verloren, aber ich wollte nicht
import java.util.Stack
(und ich bin mir nicht sicher, ob es die Lücke trotzdem schließen würde.)Ungolfed
Probieren Sie es online aus!
quelle