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 % |