Die Aufgabe
In dieser Herausforderung besteht Ihre Aufgabe darin, drei Programme zu schreiben, die eine Art gemeinsames quine-ähnliches System bilden. Nennen wir die Programme A
, B
und C
. Wenn eines der Programme die Quelle eines anderen Programms als Eingabe erhält, gibt es die Quelle des dritten Programms aus. Wenn zum Beispiel als Eingabe angegeben wird, A
wird ausgegeben . Wenn die Programme ihre eigene Quelle als Input gegeben sind, werden sie geben die drei Saiten , und (ohne Anführungszeichen). In allen Fällen kann eine weitere nachgestellte Zeile ausgegeben werden. Für alle anderen Eingaben können die Programme alles tun, einschließlich Absturz.B
C
"three"
"mutual"
"quines"
Beispiel
Angenommen, dass die Quellcodes A
, B
und C
sind aSdf
, ghJk
und zxcV
. Dann sollten sich die Programme wie folgt verhalten.
Source Input Output
--------------------
aSdf aSdf three
aSdf ghJk zxcV
aSdf zxcV ghJk
ghJk aSdf zxcV
ghJk ghJk mutual
ghJk zxcV aSdf
zxcV aSdf ghJk
zxcV ghJk aSdf
zxcV zxcV quines
Regeln und Wertung
Die Lösungen A
, B
und C
können entweder Funktionen oder vollständige Programme sein, aber sie müssen vollkommen unabhängig sein: kein gemeinsamer Code erlaubt ist.
Es gelten Standardlücken und Quine-Regeln , so dass die Programme in keiner Weise auf ihre eigenen Quellcodes zugreifen können.
Ihr Ergebnis ist die kombinierte Bytezahl A
, B
und C
niedrigere Punktzahl besser zu sein.
public static void main
irgendwo einen Teil haben.) Oder nur, dass Sie keine Funktion schreiben können, die von allen drei aufgerufen wird?Antworten:
CJam,
16514711410899 BytesVielen Dank an @ MartinBüttner für einen Vorschlag, der dazu beigetragen hat, 48 Bytes zu sparen!
Versuchen Sie es online in dem CJam Dolmetscher .
Nachprüfung
Idee
Die Menge {0, 1, 2, 3} ist eine Gruppe unter der Operation ^ (binäres exklusives ODER), wobei jedes Element seine eigene Inverse ist.
Wenn alle drei Programme bis auf das erste Zeichen (ein Element von {0, 1, 2, 3} ) identisch sind , können wir sie leicht unterscheiden und ausdrucken:
Wir beginnen mit der XOR-Verknüpfung der Ziffer am Anfang des Quellcodes und der Eingabe.
Wenn das Ergebnis 0 ist , stimmen Quelle und Eingabe überein.
Daher drucken wir eines der drei Wörter, die durch diese gemeinsame Ziffer ausgewählt werden.
Wenn das Ergebnis nicht 0 ist , befindet sich das Element von {1, 2, 3} weder in der Quelle noch in der Eingabe.
Daher drucken wir es aus, gefolgt vom Rest der Eingabe.
Wie es funktioniert
quelle