• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Kleines Rätsel

Anubid

Hacker
Man schreibe ein C-Programm das seinen eigenen Quelltext ausgibt:
Regeln:
Erlaubt sind Includes von "stdlib", "stdio" und "math".
Das Programm muss kontextfrei laufen (Sprich: Egal wo es liegt, wie das Kompilat und die Quelltext-datei benannt sind , muss es laufen. Das Programm muss auch dann laufen, wenn der Quelltext nicht mehr vorhanden ist.).
Die Ausgabe in einer Datei umgeleitet, muss mit der ursprünglichen Quelltext-datei übereinstimmen
Compiler darf keine Warnings ausgeben.
Kommentare sind erlaubt.
Rekursion ist ebenfalls erlaubt.
Nur eine Quellcodedatei.

Sonst viel Spass beim rätseln.
 

RME

Advanced Hacker
Hallo,

Interessant... aber nicht neu :D

Code:
#include <stdio.h>
char *s = "char *s = %c%s%c; main() { printf( s, 34, s, 34 ); }"; main() { printf( s, 34, s, 34 ); }
Oder etwas übersichtlicher:

Code:
#include <stdio.h>

char *s = "char *s = %c%s%c; main() { printf( s, 34, s, 34 ); }";
main() {
printf( s, 34, s, 34 );
}

Gruss,
Roland
 

RME

Advanced Hacker
Quine

Ein Quine ist ein Computerprogramm, das eine Kopie seiner selbst (üblicherweise seines Quelltextes) als Ausgabe schreibt. Es handelt sich somit um eine Form der Selbstbezüglichkeit.
de.wikipedia.org/wiki/Quine_(Computerprogramm)

Roland
 
OP
Anubid

Anubid

Hacker
Dennoch liedert deine Lösung (bzw die von Wikipedia) nicht einen vollständigen kompilierbaren code.

Hier meine Lösung:
Code:
1 |#include<stdio.h>
2 |char*m="\"";char*n="\n";char*b="\\";int q(char*x,char*y,char*z){printf("#include<stdio.h>%schar*m=%s%s%s%s;char*n=%s%sn%s;char*b=%s%s%s%s;%s%s%s%s%sint main(){q(%s%s%s,%s%s%s,%s%s%s);}%s",n,m,b,m,m,m,b,m,m,b,b,m,x,m,y,m,z,m,x,m,m,y,m,m,z,m,n);}int main(){q("int q(char*x,char*y,char*z){printf(","#include<stdio.h>%schar*m=%s%s%s%s;char*n=%s%sn%s;char*b=%s%s%s%s;%s%s%s%s%sint main(){q(%s%s%s,%s%s%s,%s%s%s);}%s",",n,m,b,m,m,m,b,m,m,b,b,m,x,m,y,m,z,m,x,m,m,y,m,m,z,m,n);}");}
3 |

Zeile 2 zu einer Zeile zusammenfassen.
 
Oben