Programm A gibt den Code von Programm B aus, wenn es ausgeführt wird, und B gibt die Quelle von A aus.
Bedarf:
- Nur eine Sprache für beide Programme
- Programme sind unterschiedlich. Ein Programm, das sich selbst ausgibt, ist nicht qualifiziert.
- Beide Programme sind nicht leer oder mindestens 1 Byte lang. Nachgestellte Zeilenumbrüche sowohl in der Quelle als auch in der Ausgabe werden ignoriert
stdin ist geschlossen.Lesen Sie nichts ( Sie können die Quelle also nicht lesen und manipulieren). Die Ausgabe erfolgt nach stdout.
Edit: stdin ist verbunden mit/dev/null
. Sie können bestellen, dass es geschlossen ist, wenn dies geklärt ist.- Verwenden Sie keine
random
Funktionen.
Zusätzlich:
- Erklärungen geben, wenn möglich
Punktzahl ist die Gesamtlänge . Der nachgestellte Zeilenumbruch zählt nicht, wenn er das Programm nicht beeinflusst.
Antworten:
CJam , 13 + 13 = 26 Bytes
Probieren Sie es online!
Ausgänge
Erläuterung
Da
e\
es in seinem zweiten und dritten Operanden kommutativ ist, macht das andere Programm genau dasselbeZ
und wechseltY
in die ursprüngliche Reihenfolge.quelle
CJam ,
11 + 13 = 2411 + 12 = 23 BytesProbieren Sie es online!
Ausgänge:
Die Ausgabe hat 13 Bytes, aber:
Also habe ich das Leerzeichen in eine neue Zeile geändert, um das auszunutzen.
Es basiert auf dem kürzesten CJam-Quine:
Und
N^
besteht darin, die Zeichenfolge mit einer neuen Zeile zu versehen, die eine neue Zeile hinzufügt, wenn es keine neue Zeile gibt, und diese zu entfernen, wenn es eine Zeichenfolge gibt, bei der jedes Zeichen eindeutig ist.Ich glaube, ich habe diese Quine in der Quine-Frage gesehen, konnte sie aber nicht finden.
quelle
RProgN 2 , 3 + 3 = 6 Bytes
Erstes Programm:
Probieren Sie es online!
Zweites Programm:
Probieren Sie es online!
-2 Danke an Martin Ender .
quelle
C, 95 + 95 = 190 Bytes
Vielen Dank an @immibis für das Speichern von 16 * 2 Bytes!
Probieren Sie es online!
Ausgänge:
Probieren Sie es online!
Welche Ausgänge:
quelle
Javascript, 67+67=134 bytes
1st program:
2nd program:
Dies basiert auf Herman Lauensteins Antwort auf Tri-Interquine
Javascript (ungültiger Quellcode),
75 + 75 = 15061 + 61 = 12258 + 58 = 11650 + 50 = 100 Bytessparte 20 Bytes dank Tushar, 6 Bytes dank Craig Ayre und sparte 16 Bytes dank kamoroso94
1. Programm:
2. Programm:
Tauscht die 1 gegen die 0 und umgekehrt. Beide machen dasselbe und produzieren aufgrund ihres Quellcodes nur unterschiedliche Ausgaben.
quelle
f.toString()
=>(''+f)
,(0|1)
=>0|1
,(a,b)
=>a
Ergebnisf=()=>("f="+(''+f).replace(/0|1/g,a=>a==0?1:0)+";f()");f()
f=_=>
und Parens aus dem Rückruf zum Ersetzen zu entfernen, wie von @Tushar vorgeschlagen:a=>+!+a
"f="+(f+"")
mit("f="+f)
für -3 Bytes./0|1/g
und/1|0/g
mit0
und1
jeweils für -5 - Bytes.f=_=>alert(("f="+f).replace(0,a=>+!+a)+";f()");f()
.Python 2, 63+63 = 126 bytes
Try it online
First program:
outputs:
Second program:
Outputs:
quelle
JavaScript (JsShell), 35 + 34 = 69 bytes
1:
2:
quelle
Mathematica, 43 + 44 = 87 bytes
and
quelle
-1
at the end, not-1 1
.asmutils sh, 16+16 bytes, abusing the "stdin is closed" rule.
Since stdin is closed and sh will open its script to the first available handle (rather than move it to a high numbered handle like modern shells do), tr ends up reading from a copy of the script without having ever opened it.
This interquine is payload capable but inserting a payload is tricky.
In addition, this original version abuses some crazy bug in the ancient kernel I used in those days. (I don't know what's up with that kernel--I found out later on it had different major and minor numbers for devices too.) If you fix the ABI changes that broke asmutils the interquine still won't work. I forget if asmutils sh has exec or not, but if it does, this is a modern version:
This abuses a deliberate bug in asmutils dd; it has a performance optimization it calls llseek for skip if it can, but to save a byte it passes SEEK_SET rather than SEEK_CUR. This results in garbage on stderr but the interquine on stdout. Asmutils dd doesn't have an option to suppress the stderr spam.
quelle
/dev/null
instead? Anyway, good job!#!/bin/sh
?Unterlast , 32 + 32 = 64 Bytes
Probieren Sie es online!
Probieren Sie es online!
quelle
Common Lisp, 58 Zeichen
... oder 24 Zeichen, wenn es Ihnen nichts ausmacht, wenn
*print-circle*
global festgelegt ist aufT
:Die gedruckte Darstellung des Codes wird als zyklische Struktur gelesen, wobei
#1#
auf die folgende Konsolenzelle zurückgegriffen wird#1=
. Wir zitieren Programme, damit sie nicht ausgeführt werden. Da*print-circle*
es T ist, achtet der REPL darauf, solche Leservariablen während des Druckens auszugeben. Dies ist, was der obige Code ausgibt und zurückgibt:Wenn wir den obigen Code auswerten, gibt er Folgendes aus:
Wenn Sie den Standardwert für
*print-circle*
beibehalten möchten , der in einer konformen Implementierung NIL ist, müssen Sie die Variable vorübergehend neu binden:Innerhalb des Körpers des LET drucken wir Dinge mit
*print-circle*
T. So erhalten wir:Wie Sie sehen, wird das neue Programm nicht erneut gebunden
*print-circle*
, aber da wirwrite
die Low-Level-Funktion verwenden, die von aufgerufen wirdprint
, können wir zusätzliche Argumente übergeben, wie z:circle
. Der Code funktioniert dann wie erwartet:Allerdings müssen Sie die oben genannten Programme als Skript auszuführen, nicht in einem REPL, denn auch wenn man die Dinge drucken , während der Rundbauten die Pflege, die beide
write
undprint
auch gibt den Wert gedruckt wird; und in einem Standard-REPL wird der Wert ebenfalls gedruckt, jedoch außerhalb des dynamischen Kontexts, in dem*print-circle*
T steht.quelle
> <> , 16 + 16 = 32 Bytes
und
Probieren Sie es online!
Dies funktioniert durch einen Sprung im Programm. Der erste Programmsprung überspringt die Umkehrung des Stapels (wenn er den Stapel umkehrt, ist das ein Quine). Das zweite Programm überspringt nicht das Gegenteil, aber wurde es bereits durch den Programmfluss umgekehrt, wird das Original erstellt.
Dieser Code endet mit einem Fehler.
quelle
RProgN 2 , 7 + 7 = 14 Bytes
Ich wollte versuchen, eine bessere Nutzung von RProgN zu demonstrieren, anstatt nur Druckaufträge zu missbrauchen ...
und...
Erklärt
Da hierdurch der Stapel verkehrt herum gedruckt wird, wird zuerst die neue Konstante und dann die stringierte Version der Funktion gedruckt.
Probieren Sie es online!
quelle
LOGO , 65 + 66 = 131 Bytes
und
quelle
Python 3, 74 + 74 = 148 Bytes
und
Ich verstehe es auch nichtquelle
> <> , 12 + 12 = 24 Bytes
und
Probieren Sie es online!
Beide Programme verwenden ein Wrapping-String-Literal, um den Code zum Stapel hinzuzufügen, und erstellen dann den
'
Befehl mit verschiedenen Methoden. Beim Drucken des Stapels wird der Code nach hinten gedrückt, der Stapel'
bleibt jedoch vorne. Es gibt verschiedene Variationen, die das produzieren'
;3d*
,d3*
,00g
,:c-
Wenn gepaart mit3d*
und:9-
wenn gepaart mit00g
.Eine zu ähnliche Lösung zum Posten, in Befunge-98 für 13 * 2 Bytes
quelle
Stax , 18 + 20 = 38 Bytes
Online ausführen und debuggen!
Online ausführen und debuggen!
Erläuterung
Der Vollständigkeit halber hinzugefügt. Port von @ jimmy23013s CJam-Antwort. Schaltet die Zeilenumbrüche mit set xor um.
quelle
Javascript (ES6), 36 + 36 = 72 Bytes
Programm 1:
Programm 2:
Diese Programme klonen sich selbst und ersetzen
5
mit4
und4
mit5
quelle
Klein ,
2624 BytesProbieren Sie es online!
Erläuterung
Dies funktioniert genauso wie bei meinem Klein Quine , bei dem die Quelle rückwärts gefolgt von einem ausgedruckt wird
"
. Das letzte Mal wurde dies durch Palindromie behoben. Wir müssen es also nicht palindromisieren, ohne die Funktionalität zu beeinträchtigen. Durch die Umstellung<
und:
wir konnten dies mit Funktionalität , ohne sich zu tun.quelle
Pari / GP , 36 + 36 = 72 Bytes
Probieren Sie es online!
Probieren Sie es online!
quelle