Ihre Aufgabe ist einfach: Schreiben Sie ein Programm, das in zwei Sprachen ausgeführt werden kann. Es sollte sich um ein normales Quine (druckt seinen eigenen Quellcode) in Sprache 1 handeln und um ein Fehlerquine (generiert eine mit seinem eigenen Quellcode identische Fehlermeldung) in Sprache 2.
Dies ist Code-Golf , also gewinnt die kürzeste gültige Übermittlung (in Bytes).
Regeln:
- Die Sprachen können beliebig ähnlich sein. Supersets / ähnliche Versionen / ähnliche Dialekte sind nicht verboten.
- Die Regeln für die Fehlerquine sind die gleichen wie in Fehlerquine erstellen! .
code-golf
quine
polyglot
error-message
Esolanging Fruit
quelle
quelle
Antworten:
Befunge-93 (FBBI) / C (tcc) , 93 + 62 = 155 Bytes
Probieren Sie es online !: Befunge-93 , C
Vielen Dank an randomdude999 für die Feststellung, dass für den Dateinamen passende Anführungszeichen erforderlich sind.
Muss unter dem Dateinamen gespeichert werden
^"\n>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p
, wo\n
sich ein Zeilenumbruch befindet. Aus diesem Grund läuft das TIO für C nicht genau wie vorgesehen. Getestet, um an Lubuntu zu arbeiten.Erklärung (C):
Das Programm kann nicht kompiliert werden und tcc gibt den Namen der Datei als Teil der Fehlermeldung aus. Abhängig vom Anfang des Codes können mehrere Kompilierungsfehler auftreten.
^
Am Anfang gibt uns einedeclaration expected
, die kurz ist und keine problematischen Zeichen wie enthält"
. Andererseits sind die Entwickler von gcc und clang sehr pessimistisch und haben sich dafür entschieden, mehrere Fehler gleichzeitig auszugeben, was nicht sehr nett ist, sodass wir ihre Compiler nicht verwenden.Erklärung (Befunge-93):
Befunge ist für Quines insofern praktisch, als sein Code dank des
"
Befehls, mit dem der String-Modus umgeschaltet wird, auch als Zeichendaten verwendet werden kann . Zu Beginn führen wir einige nutzlose Stapeloperationen durch und geben dann einenp
(put-Befehl) aus, der ein NUL-Zeichen auf (0, 1) setzt. Dann spiegeln wir den Anweisungszeiger nach links und beginnen, alles als Zeichenfolge zu lesen. Dies muss aufgrund des LIFO-Charakters des Stacks auf der linken Seite erfolgen. Nach dem Umbrechen und erneutem Erreichen des"
Zeichens endet die Zeichenfolge. Beachten Sie, dass das Zeichen NUL das Zeichen ersetzt$
Zeichen, wodurch ein Trennzeichen in der Mitte der Zeichenfolge erstellt wird. Wir schieben dann 3 Zahlen auf den Stapel und springen über die NUL (da der Interpreter leider hängt, wenn er als Anweisung ausgeführt wird). Der statische Teil der Fehlermeldung muss hier ausgeführt werden. Die meisten seiner Zeichen sind No-Ops, aber derp
Befehl verbraucht drei Argumente (daher haben wir 3 Zahlen gedrückt, sonst würde ein Teil der Zeichenfolge hier gefressen), und:
&1
Zeichen drücken insgesamt 4 Werte auf den Stapel, denen wir entgegenwirken mit ap
und a$
(pop and discard) Anweisung. Dann wird eine gewisse Arithmetik ausgeführt, um die ASCII-Codes zu verschieben,^"\n>#001p#"
und schließlich druckt eine Schleife alle Werte auf dem Stapel als Zeichen aus, bis sie ein NUL-Zeichen findet und endet.quelle
/
. Das kann ich selbst jetzt nicht testen.<define>:1: error: missing terminating " character
.Applesoft BASIC / Commodore LCD BASIC , 13 Byte
Drücken Sie im Apple] [Emulator die RESETTaste, um den BASIC-Modus aufzurufen.
Drücken Sie im Commodore LCD-Emulator, RightArrowEnterum zur BASIC-Anwendung zu gelangen.
Geben Sie in beiden Fällen nicht
?SYNTAX ERROR
alle Großbuchstaben ein, da diese automatisch groß geschrieben werden.quelle