Guten Abend meine Damen und Herren.
Heute Abend haben wir eine Code-Herausforderung. Ein Wettbewerb, der nicht in der Anzahl der Punkte (a la Asteroids) definiert wird, sondern nur, ob Sie ihn beenden können (a la Zelda). Und zum Vergleich die Anzahl der Bytes (äh ... aber du hast gesagt ...).
Ihre Herausforderung besteht darin, ein einzelnes Quine zu erstellen, das sowohl in WhiteSpace als auch in jeder anderen Sprache Ihrer Wahl kompiliert werden kann . Beide Quines müssen eine absolut identische Ausgabe haben (was als Quine absolut identisch mit dem Quellcode ist). Ihr Quine muss mehr als 3 Bytes lang sein.
Ihre Punktzahl entspricht der Größe Ihres Quellcodes in Byte.
In Anbetracht der Tatsache, dass diese Herausforderung WhiteSpace umfasst, entziehen Sie sich bitte Ihren Antworten, damit sie klar sind - vorzugsweise im C-Stil. Ihre Punktzahl ist die ursprüngliche Quelle in Bytes - nicht die maskierte Version.
Viel Glück.
Antworten:
Whitespace und Perl,
992975 ZeichenGuten Abend meine Damen und Herren.
Zunächst ist hier meine in base64 codierte Einreichung, die meiner Meinung nach die beste Möglichkeit ist, ein großes Whitespace-Programm zu kommunizieren. (Sie möchten wirklich keine Codierung verwenden, bei der Leerzeichen unverändert bleiben. Es macht also keinen Sinn, etwas "lesbareres" auszuwählen.)
Hier ist ein Auszug, der alle sichtbaren Teile der Quelle hervorhebt.
⇥
wird verwendet, um einen Tabulator und↲
eine neue Zeile anzugeben.Perl war die natürliche Wahl für die zweite Sprache in dieser Herausforderung, da es eine der besten Allzwecksprachen für das Schreiben kompakter Quines war. Meine kürzeste Perl-Quine ist 19 Bytes:
- und Sie können sehen, wie es der Same für die Perl-Hälfte des Doppelquins war. Mein bester Whitespace-Quine ist im Vergleich dazu 541 Byte lang. (Obwohl es kürzere gibt - 445 Bytes sind die besten, die ich je gesehen habe.)
Aus Sicht des Perl-Interpreters enthält die erste Zeile der Quelldatei der doppelten Quine die beiden Anweisungen, aus denen das gesamte eigentliche Programm besteht, da der verbleibende Inhalt zwei in Anführungszeichen gesetzte Zeichenfolgen sind. Die erste Zeichenfolge ist die wiederholte Zeile von Perl und wird durch die leere dritte Zeile begrenzt. Die zweite Zeichenfolge besteht ausschließlich aus Leerzeichen und wird von der vierten Zeile der Quelle bis zum
0
Begrenzer am Ende der Datei ausgeführt.Als Whitespace-Programm enthalten die ersten vier Zeilen drei Befehle, die weitgehend unbrauchbar sind. (Ihre Wirkung besteht darin, zwei Nullwerte auf den Stapel zu schieben und den zweiten zu verwerfen.) Sie sind nur enthalten, um sicher über die Zeilenumbrüche hinwegzukommen, die das Perl-Programm erfordert - das eigentliche Programm startet danach. Anstatt die unlesbare Quelle weiter zu zitieren, finden Sie hier eine Zusammenfassung der Anweisungen, aus denen sich das Whitespace-Programm zusammensetzt, in einem Assembly-ähnlichen Format:
Die riesigen Zahlen an der Spitze sind das, was Whitespace-Benutzer anstelle von tatsächlichen Zeichenfolgen verwenden müssen. Versuchen Sie nicht, dies auf einem Whitespace-Interpreter auszuführen, der keine angemessene Bignum-Unterstützung bietet.
Zum Schluss nochmal das Programm, diesmal jedoch mit C-Style Escape, da es ausdrücklich angefordert wurde:
quelle