1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#define D "#define"
#define P "("
#define E ")"
#define X "\\"
#define Q "\""
#define S " "
#define N "\n"
#define V "#"
#define SS "S"
#define SX "X"
#define SQ "Q"
#define SF "F"
#define SD "D"
#define Sn "n"
#define SN "N"
#define M "int main(){"
#define C "}"
#define H "    printf(F(D) F(P) F(E) D S SX S Q X X Q N D S SQ S Q X Q Q N F(S) D S SN S Q X Sn Q N F(V) F(SS) F(SX) F(SQ) F(SF) F(SD) F(Sn) F(SN) F(M) F(C) F(H) F(R) D S SF P SX E S SD S SS S V SX S SS S SQ S SX S SQ S SN N N M N H N R N C);"
#define R "    return 0;"
#define F(X) D S #X S Q X Q N

int main(){
printf(F(D) F(P) F(E) D S SX S Q X X Q N D S SQ S Q X Q Q N F(S) D S SN S Q X Sn Q N F(V) F(SS) F(SX) F(SQ) F(SF) F(SD) F(Sn) F(SN) F(M) F(C) F(H) F(R) D S SF P SX E S SD S SS S V SX S SS S SQ S SX S SQ S SN N N M N H N R N C);
return 0;
}

gcc self.c -o self ; ./self > replica.c ; diff self.c replica.c

Stimulate your brain, too!

ps. not pretty code scheme, I have to check others