Inspiriert von dieser Standardeinstellung für IO .
Die Aufgabe
Schreiben Sie ein Programm, das bei einer Ganzzahl x
zwischen 0 und 255 mit Exit-Code abstürzt x
.
Beschränkungen
- Sie dürfen nichts aufrufen, was direkt für die Ausgabe von Exit-Codes (
System.exit(x)
, die Rückkehr vonmain
usw.) vorgesehen ist. Stattdessen muss Ihr Programm einen Fehler oder Absturz verursachen, der mit einer Wahrscheinlichkeit von 1 dazu führt, dass das Programm mit der eingegebenen Ganzzahl beendet wird.- In diesem Fall bedeuten die Wörter "Fehler" und "Absturz", dass das Programm eine schwerwiegende, unbeabsichtigte Ausnahme verursacht hat, bei der eine Methode, ein Vorgang oder eine andere falsche Methode verwendet wurde, die einen irreversiblen Fehler verursachte.
- Sie können den Fehler nicht direkt verursachen, indem Sie ihn direkt auslösen. Sie müssen es mit einer Methode, Funktion oder auf andere Weise verursachen, deren Zweck einer anderen Funktion dient (dh der Versuch, einen Dateischreibvorgang in ein schreibgeschütztes Verzeichnis auszuführen).
- Sie müssen mindestens zwei Exit-Codes in Ihrem Programm haben.
- Die Beendigung des Prozesses unter Verwendung von Signalen ist verboten. (Argumentation kann in dieser Diskussion gefunden werden )
Wertung
Die Punktzahl Ihres Programms wird durch die Anzahl der unterstützten Beendigungscodes bestimmt, bei denen die Codekonzision gleichbedeutend ist. Die größte Anzahl unterstützter Exit-Codes gewinnt!
code-challenge
restricted-source
Addison Crump
quelle
quelle
throw new Exception()
style), ist das illegal. Wenn es das Nebenprodukt des Missbrauchs einer vorhandenen Funktion ist, dann ist das in Ordnung.one zero zero
akzeptabel , Eingaben als buchstabierte englische Ziffern (z. B. für 100) zu akzeptieren? Ich habe eine Idee für diese Herausforderung, aber die Sprache hat einige ziemlich ungewöhnliche Ideen zu E / A, und dies ist das natürlichste Eingabeformat.Antworten:
Unix-Shell (+ ncurses + BSD-Dienstprogramme),
36, 26 Bytes, 256 Exit-CodesGolf gespielt
Sobald der tput- Exit-Code 255 überschreitet, läuft er einfach über, sodass 253 (Fehler bei der Eingabe) den Exit-Code 1 usw. ergibt und somit den gewünschten Exit-Status für den gesamten Bereich von Eingaben ergibt.
Hinweis : Ob tput beim Festlegen / Abrufen einer bestimmten Funktion fehlschlägt, hängt vom verwendeten Terminaltyp ab:
xterm with 256 colors
jot ist ein BSD- Dienstprogramm, das sequentielle oder zufällige Daten druckt. Auf OSX-Systemen ist (AFAIK) auch sofort verfügbar.
Wenn Ihr System nicht
jot
verfügbar ist, können Sie eine etwas längere (29 Byte) Version verwenden:Probieren Sie es online! (die 29-Byte-Version)
quelle
Bash 4.2 + Extras, 24 Exit-Codes
Vielen Dank an @ KenY-N für 3 Exit-Codes. Vielen Dank an @ el.pescado für 1 Exit-Code.
Nachprüfung
Alle Tests wurden unter openSUSE 13.2 durchgeführt.
quelle
http_proxy=fafa curl http://example.org
INTERCAL (C-INTERCAL), 15 Codes, 313 + 2 = 315 Bytes
Probieren Sie es online!
Alle Leerzeichen sind hier irrelevant. (Das ursprüngliche Programm enthielt Tabulatoren, aber ich habe sie in Leerzeichen konvertiert, damit sie in SE korrekt ausgerichtet sind. Es ist üblich, für INTERCAL eine Tabulatorenbreite von 8 zu verwenden. Ich habe eine Version des Programms mit allen Tabulatoren und Leerzeichen getestet , und Zeilenumbrüche gelöscht, und es funktioniert gut.)
Kompilieren Sie mit
-abm
(2-Byte-Strafe, da-b
der Compiler deterministisch sein muss).Wie üblich für INTERCAL, nimmt diese numerische Eingabe in das Format, zB
ONE TWO THREE
für123
.Erläuterung
Wenn ein C-INTERCAL-Programm ausfällt, ist der Exit-Status der Fehlercode modulo 256. Als Ergebnis können wir versuchen, ein Programm zu schreiben, das in der Lage ist, so viele Laufzeitfehler wie möglich zu erzeugen. Dieses Programm lässt nur zwei Laufzeitfehler aus, die keine internen Compilerprobleme anzeigen: ICL200I, da für die Reproduktion externe Bibliotheken erforderlich sind, die nur mit einem Single-Thread-Programm kompatibel sind (und bei Multithread-Programmen sind mehr Fehler verfügbar). und ICL533I, da 533 den gleichen Wert modulo 256 wie 277 hat und das Programm ICL277I erzeugen kann.
Das Programm startet immer auf die gleiche Weise. Zuerst geben wir (
WRITE IN
) einen Wert für die Variable ein.1
. Dann verwenden wir eine berechneteCREATE
Anweisung, um eine neue Syntax zu erstellen (hier,A
). Da die Syntax berechnet wird, hängt sie vom Wert von ab.1
. Schließlich führen wir in den meisten Fällen unsere neueA
Anweisung aus, die als fehlerhaft definiert wurde. Die Tabelle der möglichen Definitionen enthält eine Definition für jeden möglichen Laufzeitfehler (mit Ausnahme der oben aufgeführten Ausnahmen).Erstens gibt es zwei Ausnahmen von diesem allgemeinen Schema.
(0)
ist keine gültige Zeilennummer. Wenn der Benutzer also etwas eingibtZERO
, springen wir(8)
mithilfe einer berechnetenCOME FROM
Anweisung von der zweiten (nummerierten ) zur vierten Zeile . Dies führt dann zu einem SyntaxfehlerDO X
, der zu Fehlern führtICL000I
. (In INTERCAL treten zur Laufzeit Syntaxfehler auf, die auf die Tendenz zurückzuführen sind, Befehle zu deaktivieren, die Syntax unter Ihnen neu zu definieren usw.). DieCOME FROM
Anweisung hat auch dann eine Nebenwirkung, wenn kein tatsächlichesCOME FROM
Ereignis eintritt. Sie erzeugt eine Operandenüberladung von.1
bis,#1
wenn eine Zeile mit einer Zeilennummer ausgeführt wird. Dies wird später bei der Ausgabe von 21 verwendet. (Zufällige globale Nebenwirkungen sind in INTERCAL ziemlich idiomatisch.)Die andere Ausnahme betrifft die Eingabe
ONE TWO NINE
. Das(129)
Programm enthält keine Zeilennummer , daher erhalten wir eine Fehlermeldung für eine fehlende ZeilennummerICL129I
. Ich musste also überhaupt keinen Code schreiben, um diesen Fall abzudecken.Hier sind die anderen Fehler und deren Ursachen:
NEXT
Stapelüberlauf (DO (123) NEXT
). DieNEXT
Anweisung benötigt andere Modifikatoren (FORGET
oderRESUME
), um rückwirkend zu bestimmen, um welche Art von Steueranweisung es sich handelt. Wenn diese nicht vorhanden sind, wird der Fehler ICL123I ausgelöst, sobald 80 ungelöste `NEXT-Anweisungen vorliegen.DO STASH .2
in einerCOME FROM
Schleife). Die Stashes sind nur durch den verfügbaren Speicher begrenzt, aber dieser wird irgendwann ausgehen und den Fehler ICL222I verursachen.DO ,1 <- #0
bedeutet, und es verursacht den Fehler ICL240I.,1
wurde keine Zuordnung vorgenommen (,
wird für Variablen vom Typ Array in INTERCAL verwendet). Die Indizierung verursacht daher den Fehler ICL241I.#256 $ #0
einer 16-Bit-Variablen 65536 ( ) zu.2
. Es passt nicht und verursacht den Fehler ICL275I.#2
an.1
. Das sieht vielleicht einfach aus, aber wir haben es überladen.1
, um es#1
früher zu meinen , und der Versuch, den Wert 1 ohne-v
Option in der Befehlszeile zu ändern , verursacht den Fehler ICL277I.GO BACK
) zurückzukehren, der zu diesem Zeitpunkt im Programm noch nicht vorhanden ist (wir haben keine Befehle zum Bearbeiten des Auswahlpunktstapels ausgeführt, daher ist dieser noch leer). Das verursacht Fehler ICL404I.RETRIEVE .2
von einem nicht existierenden Stash (weil wir dort nichts in diesem Zweig des Programms versteckt haben), was den Fehler ICL436I verursacht.WRITE IN
) für immer in einerCOME FROM
Schleife. Irgendwann werden wir nach dem EOF lesen und den Fehler ICL562I verursachen.DO RESUME #0
, die bedeutungslos und spezifisch als fehlerverursachend dokumentiert ist (ICL621I).DO RESUME #9
. Wir haben noch nicht so vieleNEXT
Anweisungen ausgeführt und erhalten daher den Fehler ICL120I. (Interessanterweise wird dieser bestimmte Fehler in der INTERCAL-Dokumentation so definiert, dass er das Programm normal beendet und dann den Fehler verursacht, anstatt das Programm mit einem Fehler zu beenden. Ich glaube jedoch nicht, dass diese beiden Fälle sich merklich unterscheiden.)Nachprüfung
Einige der Fehler bestehen darin, dass das Programm absichtlich nicht genügend Arbeitsspeicher hat. Ich empfehle daher, relativ kleine Arbeitsspeicherlimits festzulegen. Hier ist der Shell-Befehl, den ich zum Testen des Programms verwendet habe (mit Zeilenumbrüchen, die der Lesbarkeit halber hinzugefügt wurden; löschen Sie sie, wenn Sie sie selbst ausführen):
Und hier ist die Ausgabe (mit den Zeilennummern und "BITTE KORREKTURIEREN" -Nachrichten, die aus Platzgründen gelöscht wurden), die ich teilweise hinzugefügt habe, um die Funktionsweise des Programms zu demonstrieren, aber hauptsächlich, um die albernen Fehlermeldungen von INTERCAL zu demonstrieren:
quelle
Perl, 108 Bytes, 256 Exit-Codes
Dieses Programm (ab) verwendet das Modul Test :: More . Es wird versucht, die Datei mit dem Namen
""
n mal zu öffnen, wobei n als Befehlszeilenargument angegeben wird. Es schlägt jedes Mal fehl und jeder Aufruf wird als Test behandelt. Test :: Mehr Anzahl fehlgeschlagener Tests als Exit-Code.plan tests => $ARGV[0]%255
wird benötigt, um den Exit-Code 255 zu erhalten.quelle
perl -MTest::More -e'plan tests,$%%255if$%=<>;ok 0for 1..$%'
51 Bytes (38 Bytes + 13 Bytes für-MTest::More<space>
). Übernimmt die Eingabe für stdin.C90 (gcc), 256 Exit-Codes,
282718 BytesIch bin mir nicht sicher , ob das klug oder cheaty ist, aber ich glaube nicht , dass die Regeln verletzt , wie geschrieben: es ist technisch nicht zu verwenden
exit
,return
oder ein Fehler Mechanismus werfen, sondern verlässt sich einfach auf undefinierten Verhalten und die Tatsache , dass gcc tut etwas ziemlich Bequemes, was diese Herausforderung angeht.Probieren Sie es online!
Wie es funktioniert
Dies wird einfach verwendet
getchar
, um ein Byte von STDIN zu lesen. Dies allein macht nichts.Ein kompatibles C90-Programm muss jedoch mit einer
return
Anweisung oder etwas Äquivalentem enden . alles andere ist undefiniertes Verhalten. gcc beendet die generierte Assemblyret
trotzdem mit einem , sodass der zufällige Wert im Register EAX vom Programm zurückgegeben wird. Glücklicherweisegetchar
speichert glibc das von STDIN gelesene Byte in EAX, so dass der Wert dieses Bytes der Exit-Code unseres Programms ist.quelle
set -o fullexitcode
.return
oderexit
ist nach C90-Standard ein Fehler und führt zu einem Exit-Code, der auf einen Fehler hinweist. Das ist alles, was ein Absturz ausmacht.C (gcc) unter der Bash-Shell auf x86, 230 Bytes, 8 Exit-Codes
Neue Zeilen zur besseren Lesbarkeit hinzugefügt. Kommentare in der Partitur ignoriert.
Ein Feature der Bash-Shell:
Alles, was wir tun müssen, ist, verschiedene Signale innerhalb eines AC-Programms auszulösen. An dieser Stelle gehe ich davon aus, dass einfaches Tun
kill(n-128);
verboten ist. Stattdessen führen wir Code aus, der verschiedene Signale auslöst, wodurch die entsprechenden Fehlercodes in der aufrufenden Shell verfügbar gemacht werden.Die Exit-Codes sind 0, 130, 133, 134, 136, 139, 141, 142.
Probieren Sie es online aus . Erweitern Sie den Abschnitt "Debug", um den Rückkehrcode anzuzeigen.
Dies kann sicherlich tiefer golfen werden. Aber ich wäre mehr daran interessiert, mehr Signale hinzuzufügen.
quelle
__asm("UD2")
die x86-Anweisung "undefined" aus, die eine CPU-Ausnahme verursacht, die vom Kernel in Form eines SIGILL-Signals an das Programm weitergeleitet wird. Imsocketpair
Beispiel wird SIGPIPE vom Kernel oder von glibc gesendet, während wir versuchen,write()
zu einer Pipe zu gelangen, dieclose()
am anderen Ende d war.int3
undint $3
2) ein Zeichen, wenn Siev
als deklarierenint**
, vorausgesetzt, Sie verlassen sich nicht grundsätzlich auf diechar
-ness des Datentyps in Ihrer Zeigerarithmetik, plus 3) zwei Zeichen, wenn Sie verwenden*p
Anstelle vonp[0]
oder 4) sechs Zeichen, wenn Sie bereit sind, sich auf die vorhersagbarenfd
Zahlen zu verlassen, die von allen Systemaufrufen zurückgegeben werden, die sie erstellen,p[0]
und siep[1]
durch ihre beinahe bestimmten Werte zu ersetzen . Schließlichpipe(fd)
ist viel kürzer alssocketpair(...)
und erzeugt den gleichen Fehler beim Schließenfd[0]
und Schreiben.fd[1]
.&63
anstelle von-128
. 2) Ersetzensleep(2)
durchfor(;;)
. 3) Ersetzenc=*(int*)c
durchatoi(0)
. 4) Ersetzenc/=c-2
durchc/=0
.Python 2, 13 Bytes, 2 Exit-Codes
Wenn Sie 0 eingeben, wird versucht zu drucken,
1/-1
was -1 ist, was vollkommen in Ordnung ist. Beenden Sie also Code 0. Wenn Sie 1 eingeben, erhalten Sie,1/0
was einen auslöst,ZeroDivisionError
in dem es einen Beenden-Code von 1 gibt. Bei meiner IDE gibt es nur 0 und 1 für die Exit-Codes ...Ausgänge:
quelle
PHP, 15 Bytes, 2 Exit-Codes
Ohne
die
/exit
kann PHP nichts anderes als0
oder255
(afaik; wahrscheinlich~1
) zurückgeben, also ...Wenn das Befehlszeilenargument falsch ist, wird es mit ausgewertet
1
und beendet0
. Andernfalls wird versucht, eine Funktion aufzurufen, und es wird mit beendet<b>Fatal error</b>: Uncaught Error: Call to undefined function p()
.Laufen Sie mit
-r
.quelle
exit()
Setzt einen Exit-Status, den Sie für diese Herausforderung nicht verwenden können. Ihr Code ist aber auch ungültig. Es setzt den Ausgangsstatus auf 2551
. Ich habe nach einer Liste von Exit-Codes gesucht, aber keinen gefunden.Excel VBA,
414514 533 + 3 Bytes, 14 BeendigungscodesNimmt als Eingabe ein
Conditional Compilation Argument
,n=[input value]
und erzeugt , die Anzahl der zugeordneten Fehlercode.+3 für
n=[Value]
bedingten KompilierungsaufrufVerarbeitet Eingaben, bei denen
n=
Hinweis: VBA hat keine Exit-Codes
0
oder1
. Ich habe die Lösungen für3
und hinzugefügt5
, die die beiden Exit-Codes mit der niedrigsten Nummer sind, die VBA an ihrer Stelle zur Verfügung stelltquelle
#
hier?#if
und#ElseIf
sind bedingte Kompilierungsanweisungen, was bedeutet, dass die folgenden Anweisungen nur kompiliert werden, wenn die Bedingung erfüllt ist#
, wo sie kompiliert würden, ob die Aussagen wahr sind oder nicht? Ich weiß, wieIf
Anweisungen funktionieren, aber ich bin neu darin, zu verstehen , was tatsächlich kompiliert wird , und entschuldige mich für eine so einfache Frage.#if
Zweck werden anstelle vonIf
oderSelect Case
nurtruthy
bedingte Anweisungen tatsächlich kompiliert. In diesem Fall speziell, hält dies das Programm vom Verlassen mit dem Fehlercode3
,Return without GoSub
bei jeder Ausführung, sondern nur mit diesem Code verlässt , wennn=3
Turtlèd, 4 Bytes, 2 Exit-Codes
Ich weiß nicht, ob es Möglichkeiten gibt, mehr Exit-Codes zu erhalten ... gibt es noch mehr Möglichkeiten in der Interpretersprache?
Ich habe ein paar Antworten in vier Längen gefunden
Probieren Sie es online!
Probieren Sie es online!
Probieren Sie es online!
Wie diese funktionieren:
In meinem Interpreter gibt es eine
Fehlerfunktion, die Fehler verursacht, wenn das Raster im Speicher mehr als eine Zeile enthält und keine nicht-Leerzeichen enthält. Dieses Programm löscht das * in der Ursprungszelle'[space]
, nimmt eine nicht negative Ganzzahleingabe?
(0 oder 1) und verschiebt sich so oft nach unten;
, wenn es Null ist, hat das Gitter nur eine Zeile und keinen Fehler, andernfalls verschiebt es sich nach unten und der Fehler wird auftretenKlammern und Zeug werden nicht analysiert, sondern nur zur Laufzeit ausgeführt, um zu bedeuten: "Springe zum passenden Paren, wenn das Zellsymbol nicht stimmt". In diesem Programm
!
bewirkt die Eingabe von ( ), dass das Programm es in die Zelle (.
) schreibt, den Paren ausführt, der prüft, ob das Zellsymbol 0 ist, versucht, zum passenden Paren zu springen, sondern stattdessen einen Fehler auslöst, da es keinen gibt . Wenn es null ist, schreibt es es auf, überprüft die Klammern, befindet sich auf einer 0 und ignoriert es dann und das Programm wird beendethat Elemente der vorherigen Antwort und der ersten. Es wird eine nicht negative Ganzzahleingabe verwendet, die Anzahl verringert und überprüft, ob die Zelle '*' ist. Ist dies nicht der Fall, wird nach einem nicht vorhandenen zusätzlichen Paren gesucht. Wenn die Eingabe 1 ist, verlässt sie das Startfeld und stellt fest, dass die Zelle ein Leerzeichen ist. Wenn sie Null ist, bleibt sie im Startfeld und ignoriert den Paren.
quelle
Javascript (Knoten), 19 Bytes, 2 Exit-Codes
Volles Programm:
Funktion:
process.argv
ist ein Array, das den Pfad zur ausführbaren Datei des Knotens, den Pfad zur ausgeführten Javascript-Datei und die Befehlszeilenargumente enthält. In diesem Fall ist dies entweder"1"
oder"0"
. Die Zeichenfolge wird mit dem unären+
Operator in eine Zahl umgewandelt . Wenn die Zahl Null ist,&&
wertet der Lazy Operator die rechte Seite nicht aus. Wenn die Zahl wahr ist (nicht Null), wird die rechte Seite von&&
ausgewertet und ein Fehler ausgegeben , da sie auf eine undefinierte Variable verweist und das Programm existiert mit Exit-Code 1.Die Funktion erwartet die Eingabe als Zahl. Wenn die Eingabe wahr ist, ruft die Funktion sich selbst auf und stürzt die Knotenlaufzeit mit einem Stapelüberlauf ab. Wenn die Eingabe 0 ist, gibt der Lazy
&&
Operator 0 zurück, ohne die rechte Seite auszuwerten.quelle
+process.argv[2]&&a
.ReferenceError.prototype.name=process.argv[2]?a:0
gültig?Perl 6 , 57 Bytes, 256 Exit-Codes
Try it
Dies ist eine Übersetzung des Perl 5-Beispiels.
Erweitert
quelle
Scala, 19 Bytes, 2 Exit-Codes
if(args(0)=="1")1/0
1/(args(0).toInt-1)
Die JVM unterstützt nur 1 und 0 als Exit-Codes, wenn Sie nicht anrufen
System.exit
.Das erste Programm versucht zu berechnen,
1/0
ob das erste Argument ein1
Absturz der JVM mit dem Exit-Code 1 ist. Wenn das Argument 0 ist, wird es erfolgreich beendet.Das zweite Programm, das das Argument in eine Ganzzahl umwandelt, subtrahiert eine und versucht, 1 durch diese Zahl zu dividieren. Wenn das Argument 1 ist, wird es berechnet
1/0
, sodass die JVM abstürzt. Wenn das Argument 0 ist, wird es berechnet1/-1
und beendet.quelle
Python 3 , 15 Bytes, 2 Exit-Codes
Dies ist offensichtlich länger als die Python 2-Lösung , da in Python 3 keine wörtliche Eingabe ohne Aufruf möglich ist
eval
. Interessanterweise können wir jedoch String-Vergleichstechniken verwenden ...Die Eingabe ist entweder die Zeichenfolge
0
oder1
- wenn es 1 ist, wird die Bedingung mit 0 (falsch) bewertet, was zu einem Versuch führt, zu berechnen,1 / 0
der offensichtlich abstürzt (Beendigungscode 1). Andernfalls passiert nichts und Python wird mit dem regulären Exit-Code 0 beendet.Soweit mir bekannt ist, kann Python nicht mit anderen Exit-Codes abstürzen.
quelle
Java,
7166 Bytes, 2 Exit-Codes4 Bytes gespart dank Holger
Volles Programm:
Funktion, die ein int als Argument verwendet:
Das Programm verwendet das erste Zeichen des ersten Argumanten (entweder
'0'
oder,'1'
und subtrahiert 48 (ASCII-Wert von'0'
), um eine Ganzzahl (0 oder 1) zu erhalten. Anschließend versucht es, das Argument an der Position dieser Ganzzahl auf die leere Zeichenfolge zu setzen Die Eingabe ist 1, das Programm stürzt mit einem abArrayIndexOutOfBoundsException
, da das Argumentarray nur ein Element an Position 0 hat (null-indiziert).quelle
a[a[0].equals("1")?1/0:1]="";
, der mit gleichwertig istint x=a[0].equals("1")?1/0:1;
. Aber das Programm weiter zu ändern, um ein paar Bytes zu provozierenArrayIndexOutOfBoundsException
anstatt zuArithmeticException
sparen:interface I{static void main(String[]a){a[a[0].charAt(0)-'0']="";}}
Python 2, 11 Bytes, 2 Exit-Codes
Drei verschiedene 11-Byte-Lösungen für drei verschiedene Fehler! (Nur zum Spaß, dies gibt keine Punkte.) Standardmäßig hat Python nur die Beendigungscodes 0 für einen erfolgreichen Abschluss und 1 für einen Fehler. Die erfolgreichen Läufe geben nichts aus.
Am Eingang 1 wird "ValueError: negative Shift Count" ausgegeben. Bei Eingabe von 0 ist eine Null-Verschiebungszählung erfolgreich und ergibt 1.
Bei Eingabe 1 wird "ZeroDivisionError: Ganzzahldivision oder Modulo durch Null" ausgegeben, da
~-input()
, auchinput()-1
als 0 bezeichnet. Bei Eingabe 1 wird1/-1
-1 ausgegeben .0**-input()
würde auch funktionieren.Bei Eingabe 1 wird "NameError: Name 'x' ist nicht definiert" ausgegeben. Bei Eingabe von 0 wird diese erste Ungleichung
0<0
zu Falsch ausgewertet, der Rest wird also nicht ausgewertet und das Ergebnis ist nur Falsch.quelle
Node.js (ES6), 77 Byte, 2 Exit-Codes
quelle
Gelee , 4 Exit-Codes, 18 Bytes
Unterstützt die Exit-Codes 0 , 1 , 137 (getötet) und 139 (Segmentierungsfehler).
Probieren Sie es online!
Wie es funktioniert
quelle
SmileBASIC, 640 Bytes, 39 Exit-Codes (von 52)
Dies könnte definitiv kürzer gemacht werden. SB hat nur Fehlercodes von 0 bis 51, und einige können nicht ausgelöst werden.
quelle
ZX81 BASIC> 255 Exit-Codes - 52 Bytes (Auflistung)
Technisch
N
könnte jede 24-Bit-Gleitkommazahl innerhalb des Bereichs sein, aber wir nehmen hier ganze Zahlen an. Zeile 2 entspricht derIF N>0 AND N <=255 THEN GOTO 3: ELSE GOTO 1
Angabe von ZX81 BASICIF/ELSE
in den symbolischen Anweisungen.quelle
the program caused some fatal unintended exception
? Dies druckt nur einen Text aus und beendet die Ausführung.RAND USR N
wird unbeabsichtigte Auswirkungen haben, da das Aufrufen eines Teils des ROM von einem unerwarteten Ort aus keine gute Idee ist und daherRAND USR 0
ausgeschlossen wurde, da dies zu anmutig ist.LD BC, 0000 RST 10 RET
bei 0x1000 haben, aber angerufen haben,RAND USR 4097
dann verpassen Sie den LD-Operanden und der Maschinencode wird daher verzerrt. Ich erinnere mich nicht an alle ROM-Aufrufe, aber ich werde alle legalen / würdevollen Zwecke ausarbeiten und sie später ausschließen.