Diese Herausforderung ähnelt Can you Meta Quine?
Ein Quine ist ein Programm, das sich auf STDOUT selbst produziert. Diese Herausforderung besteht darin, ein Programm A zu erzeugen, das beim Ausführen ein Programm B auf STDOUT erzeugt. Programm B erzeugt beim Ausführen Programm A auf STDOUT. Programme A und B müssen in derselben Sprache geschrieben sein (und in derselben Sprache ausgeführt werden). Die verknüpfte Frage beschränkte A! = B. Das sah zu einfach aus. Für diese Frage bestehen wir also darauf, dass A und B Antiquitäten sind, wobei die folgenden Regeln angewendet werden:
- Die Programme A und B dürfen nicht dieselben Zeichen verwenden, außer für Leerzeichen und Anweisungstrennzeichen sowie Interpunktionszeichen.
- Programme A und B müssen jeweils mindestens ein Zeichen enthalten, das weder ein Leerzeichen noch ein Anweisungstrennzeichen oder ein Interpunktionszeichen ist.
- Für die Zwecke der Regeln 1 und 2 schließt der Begriff "Leerzeichen" jedes Symbol oder jede Folge von Symbolen aus, bei denen es sich um eine Anweisung, einen Operator oder ein Symbol handelt, die (im Gegensatz zu einem Trennzeichen) interpretiert werden. Daher gibt es in der Whitespace-Sprache kein Whitespace.
- Ein Anweisungstrennzeichen ist ein syntaktisches Element, das üblicherweise in der Sprache zum Trennen von Anweisungen verwendet wird. Dies würde den Zeilenumbruch in Python oder das Semikolon in Java, Perl oder C einschließen.
- Ein Satzzeichen ist ein ASCII - Zeichen , die weder Leerzeichen ist noch in der Zeichenklasse POSIX Wortes (dh ein Unterstrich ist nicht Interpunktion für diesen Zweck) - also
ispunct()
zurückkehren würde wahr, und es ist nicht_
. - Programm A muss beim Ausführen ein Programm (Programm B) auf seinem STDOUT erzeugen, das beim Ausführen wiederum Programm A erzeugt.
- Programme A und B müssen in derselben Programmiersprache sein.
- Die verwendete Programmiersprache muss tatsächlich eine Programmiersprache sein. Sofern Sie nichts anderes vorbringen, schlage ich vor, dass Turing vollständig ist.
- Mindestens eine von A und B muss mindestens eine Anweisung innerhalb der Sprache ausführen.
Dies ist Codegolf, daher gewinnt die kürzeste Antwort, wobei die Punktzahl die Länge von Programm A in Bytes ist (dh die Länge von Programm B ist nicht relevant).
A
unda
andere „Zeichen“ in Betracht gezogen?Antworten:
GolfScript, 13 Bytes
Die Ausgabe ist
das erzeugt das anfängliche Programm.
Die Byteanzahl enthält die nachgestellte LF, da die Ausgabe der Ausgabe diese enthält.
Probieren Sie es online aus.
Wie es funktioniert
GolfScript druckt den Inhalt des Stapels nach Beendigung.
quelle
Programs A and B may not use any of the same characters, save for whitespace and statement separators, and punctuation characters.
1
und2
ist Interpunktion.Pascal (731 Zeichen)
Programm A:
Ausgabeprogramm B:
Ausgabeprogramm A.
quelle
ROT13 ( konkurriert nach Regelaktualisierung nicht mehr )
Ich bin mir nicht sicher, ob dies als Sprache zählt, aber ich habe die Herausforderung mit Sicherheit nicht gemeistert. In der Regel werden auch Antworten für bestimmte Dienstprogramme
sed
akzeptiert. Es ist jedoch ein Urteilsspruch, also wenn es nicht zählt, werde ich es entfernen (gibt es irgendwo eine Metadiskussion darüber, was als Sprache zählt? Bearbeiten: Es gibt jetzt )Zyklen zwischen
A
undN
:quelle
STDIN
und kein Programm ausführt. Wenn Sie behaupten, dass es sich um ein Nulllängenprogramm handelt, wird Regel 2 nicht erfüllt. Das Programm (mitsed
) ist das, was übergeben wirdsed -e
. Wenn dies akzeptabel wäre,cat
wäre es ein Quin undtac
wäre es ein Quin und ein Antiquum. Allerdings produziert nichts , um die Quelle zucat
,tac
oder was das betrifftrot13
.rot13
Als Programmiersprache scheint sie keiner vernünftigen Definition von „Programmiersprache“ zu genügen, und sie interpretiert nichts. Ich werde die Frage ändern, um dies klarer zu machen.