home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 3 / 3083 < prev    next >
Encoding:
Internet Message Format  |  1991-03-16  |  1.2 KB

  1. From: jay@hermix.UUCP (Jay Skeer)
  2. Newsgroups: alt.sources,comp.lang.c
  3. Subject: Re: Small introspective program
  4. Message-ID: <217@hermix.UUCP>
  5. Date: 15 Mar 91 21:22:34 GMT
  6.  
  7. This one is self-recognizing.  I am sure someone can do it shorter.
  8.  
  9. (Btw, what about lisp's shortest self-repro programs "T", "0", "1", "2", ...)
  10.  
  11. j'
  12. -------------------
  13. #include <stdio.h>
  14. #define N 18
  15. #define F 8
  16. #define L 80
  17. #define Y Z[k++]
  18. #define P sprintf
  19. char*I="\"%s\",",*B="%s",
  20. M[N*3][L],Z[L],D[N][L]={
  21. "#include <stdio.h>",
  22. "#define N 18",
  23. "#define F 8",
  24. "#define L 80",
  25. "#define Y Z[k++]",
  26. "#define P sprintf",
  27. "char*I=\"\\\"%s\\\",\",*B=\"%s\",",
  28. "M[N*3][L],Z[L],D[N][L]={",
  29. "\"\"},v='\\\\',q='\\\"';",
  30. "main(){int c,i=0,j=0,k,l;",
  31. "for(;i<F;P(M[j++],B,D[i++]));",
  32. "for(i=0;i<N-1;i++,P(M[j++],I,Z))",
  33. "for(k=0,l=0;Z[k]=0,c=D[i][l++];Y=c)",
  34. "((c^v)*(c^q))||(Y=v);",
  35. "for(i=F;i<N;P(M[j++],B,D[i++]));",
  36. "for(i=0;gets(Z);)strcmp(M[i++],Z)&&exit(puts(\"no\"),1);",
  37. "exit(puts(\"yes\"),0);}",
  38. ""},v='\\',q='\"';
  39. main(){int c,i=0,j=0,k,l;
  40. for(;i<F;P(M[j++],B,D[i++]));
  41. for(i=0;i<N-1;i++,P(M[j++],I,Z))
  42. for(k=0,l=0;Z[k]=0,c=D[i][l++];Y=c)
  43. ((c^v)*(c^q))||(Y=v);
  44. for(i=F;i<N;P(M[j++],B,D[i++]));
  45. for(i=0;gets(Z);)strcmp(M[i++],Z)&&exit(puts("no"),1);
  46. exit(puts("yes"),0);}
  47.