Programmiere, welcher Quellcode genau der gleiche ist wie seine Ausgabe [duplizieren]

8

Je mehr ich versuche, dieses verblüffte Rätsel zu verstehen, desto mehr möchte ich aufgeben.

%Vor%

Wie läuft es für diesen einzeiligen Quellcode ab, genau die gleiche Ausgabe zu erzeugen, wenn das Programm ausgeführt wird, und gibt es irgendeine allgemeine Vorstellung für diese Art von Programmen?

    
Malina 28.08.2015, 09:26
quelle

3 Antworten

11

Dies nennt man Quine .

Sehen wir mal, was main() macht:

%Vor%

34 ist der ASCII-Code für das Zeichen " (double quote), also ist das das Gleiche wie:

%Vor%

Das erste Argument für printf(3) ist die Formatzeichenfolge. Die übergebene Zeichenfolge lautet:

%Vor%

Also gibt printf(3) genau das aus, aber beachte die Formatbezeichner %c , %s und %c , die printf(3) anweisen, ein Zeichen zu drucken, gefolgt von einer Zeichenkette gefolgt von einem anderen Zeichen in dieser Ort, die jeweils das 2., 3. und 4. Argument sind.

Die Zeichen, wie wir gesehen haben, sind beide " und die Zeichenkette ist wieder s (die gleiche Zeichenkette). Also ist die Programmausgabe:

%Vor%

Dabei ist X die Zeichenkette s im Programm. Also bekommen wir das als Ausgabe:

%Vor%

Was interessanterweise die Programmquelle selbst ist.

    
Filipe Gonçalves 28.08.2015, 09:40
quelle
3

Nimm diese Zeichenfolge vom ersten Parameter von printf:

%Vor%

und ersetze wo

%Vor%

printf wird die Substitution nur einmal ausführen (nicht rekursiv), also lautet das Ergebnis:

%Vor%     
Ormei 28.08.2015 09:40
quelle
1

Um den Code zu verstehen, vereinfachen und formatieren Sie ihn zunächst:

%Vor%

und verwendet s als Formatierungszeichenfolge, um drei Entitäten zu drucken: 34 , die Zeichenfolge s selbst und 34 . In diesem Fall ist der wichtige Teil der Formatierungszeichenfolge s :

%Vor%

bedeutet, dass die beiden 34 s zu doppelten Anführungszeichen werden ( " ) und die Formatierungszeichenfolge s nur als normale Zeichenfolge ausgegeben wird. Jetzt sollten Sie den Rest der Formatierungszeichenfolge sehen s ist nur eine Kopie des gesamten Programms.

    
TripeHound 28.08.2015 09:45
quelle

Tags und Links