Incorporating New Code
Into a
|
Self reproducing program: quine2.c |
---|
#include<stdio.h> char *a[] = {"\"};\n\n", "main() {\n", " int i=0; char *b;\n", " printf(\"#include<stdio.h>\\nchar *a[] = {\\\"\");\n", " while(*a[i]) {\n", " for(b=a[i];*b;b++)\n", " switch(*b) {\n", " case '\\n': printf(\"\\\\n\"); break;\n", " case '\\\\': case '\\\"': putchar('\\\\'); \n", " default: putchar(*b);\n", " } \n", " printf(\"\\\",\\n\\t\\\"\"); \n", " i++;\n", " }\n", " i=0;\n", " while(*a[i]) {for(b=a[i];*b;b++)putchar(*b);i++;}\n", "}\n", ""}; main() { int i=0; char *b; printf("#include<stdio.h>\nchar *a[] = {\""); while(*a[i]) { for(b=a[i];*b;b++) switch(*b) { case '\n': printf("\\n"); break; case '\\': case '\"': putchar('\\'); default: putchar(*b); } printf("\",\n\t\""); i++; } i=0; while(*a[i]) {for(b=a[i];*b;b++)putchar(*b);i++;} } |
% cc -o quine2 quine2.c % quine2 > quine2_out.c % diff quine2.c quine2_out.c % |
Program to incorporate in: pi.c |
---|
#include <stdio.h> #include <math.h> int main() { FILE *outfile = fopen("pifile", "w"); fprintf(outfile, "%20.16f\n",4.0*atan(1.0)); } |
% rm pifile % cc -o pi pi.c -lm % pi % cat pifile 3.1415926535897931 |
Self reproducing program: quine_pi.c |
---|
#include<stdio.h> #include<math.h> char *a[] = {"\"};\n\n", "main() {\n", " int i=0; char *b;\n", " FILE *outfile = fopen(\"pifile\", \"w\");\n", " fprintf(outfile, \"%20.16f\\n\",4.0*atan(1.0));\n", " printf(\"#include<stdio.h>\\n#include<math.h>\\nchar *a[] = {\\\"\");\n", " while(*a[i]) {\n", " for(b=a[i];*b;b++)\n", " switch(*b) {\n", " case '\\n': printf(\"\\\\n\"); break;\n", " case '\\\\': case '\\\"': putchar('\\\\'); \n", " default: putchar(*b);\n", " } \n", " printf(\"\\\",\\n\\t\\\"\"); \n", " i++;\n", " }\n", " i=0;\n", " while(*a[i]) {for(b=a[i];*b;b++)putchar(*b);i++;}\n", "}\n", ""}; main() { int i=0; char *b; FILE *outfile = fopen("pifile", "w"); fprintf(outfile, "%20.16f\n",4.0*atan(1.0)); printf("#include<stdio.h>\n#include<math.h>\nchar *a[] = {\""); while(*a[i]) { for(b=a[i];*b;b++) switch(*b) { case '\n': printf("\\n"); break; case '\\': case '\"': putchar('\\'); default: putchar(*b); } printf("\",\n\t\""); i++; } i=0; while(*a[i]) {for(b=a[i];*b;b++)putchar(*b);i++;} } |
% rm pifile % rm quine2_pi % cc -o quine2_pi quine2_pi.c -lm % quine2_pi > quine2_pi_out.c % cat pifile 3.1415926535897931 % diff quine2_pi.c quine2_pi_out.c % |