[Metaprogramación] QuineK... Mi primer Quine.

Leyendo sobre metaprogramacion, decidí hacer mi primer Quine.. o para los que no conocen el termino, un programa capaz de generar como salida su código fuente...acepto sugerencias o correcciones.

#include <stdio.h>
char fuente[] = {
  'i',
  'n',
  't',
  ' ',
  'm',
  'a',
  'i',
  'n',
  '(',
  ')',
  '{',
  '\n',
  '\t',
  'i',
  'n',
  't',
  ' ',
  'i',
  ';',
  '\n',
  '\t',
  'p',
  'r',
  'i',
  'n',
  't',
  'f',
  '(',
  '"',
  '#',
  'i',
  'n',
  'c',
  'l',
  'u',
  'd',
  'e',
  '<',
  's',
  't',
  'd',
  'i',
  'o',
  '.',
  'h',
  '>',
  '\\',
  'n',
  'c',
  'h',
  'a',
  'r',
  ' ',
  'f',
  'u',
  'e',
  'n',
  't',
  'e',
  '[',
  ']',
  ' ',
  '=',
  ' ',
  '{',
  '\\',
  'n',
  '"',
  ')',
  ';',
  '\n',
  '\t',
  'f',
  'o',
  'r',
  '(',
  'i',
  '=',
  '0',
  ';',
  'f',
  'u',
  'e',
  'n',
  't',
  'e',
  '[',
  'i',
  ']',
  ';',
  'i',
  '+',
  '+',
  ')',
  '{',
  '\n',
  '\t',
  '\t',
  's',
  'w',
  'i',
  't',
  'c',
  'h',
  '(',
  'f',
  'u',
  'e',
  'n',
  't',
  'e',
  '[',
  'i',
  ']',
  ')',
  '{',
  '\n',
  '\t',
  '\t',
  '\t',
  'c',
  'a',
  's',
  'e',
  ' ',
  '\'',
  '\\',
  'n',
  '\'',
  ':',
  '\n',
  '\t',
  '\t',
  '\t',
  '\t',
  'p',
  'r',
  'i',
  'n',
  't',
  'f',
  '(',
  '"',
  '\\',
  't',
  '\'',
  '\\',
  '\\',
  'n',
  '\'',
  ',',
  '\\',
  'n',
  '"',
  ')',
  ';',
  '\n',
  '\t',
  '\t',
  '\t',
  '\t',
  'b',
  'r',
  'e',
  'a',
  'k',
  ';',
  '\n',
  '\t',
  '\t',
  '\t',
  'c',
  'a',
  's',
  'e',
  ' ',
  '\'',
  '\\',
  't',
  '\'',
  ':',
  '\n',
  '\t',
  '\t',
  '\t',
  '\t',
  'p',
  'r',
  'i',
  'n',
  't',
  'f',
  '(',
  '"',
  '\\',
  't',
  '\'',
  '\\',
  '\\',
  't',
  '\'',
  ',',
  '\\',
  'n',
  '"',
  ')',
  ';',
  '\n',
  '\t',
  '\t',
  '\t',
  '\t',
  'b',
  'r',
  'e',
  'a',
  'k',
  ';',
  '\n',
  '\t',
  '\t',
  '\t',
  'c',
  'a',
  's',
  'e',
  ' ',
  '\'',
  '\\',
  '\\',
  '\'',
  ':',
  '\n',
  '\t',
  '\t',
  '\t',
  '\t',
  'p',
  'r',
  'i',
  'n',
  't',
  'f',
  '(',
  '"',
  '\\',
  't',
  '\'',
  '\\',
  '\\',
  '\\',
  '\\',
  '\'',
  ',',
  '\\',
  'n',
  '"',
  ')',
  ';',
  '\n',
  '\t',
  '\t',
  '\t',
  '\t',
  'b',
  'r',
  'e',
  'a',
  'k',
  ';',
  '\n',
  '\t',
  '\t',
  '\t',
  'c',
  'a',
  's',
  'e',
  ' ',
  '\'',
  '\\',
  '\'',
  '\'',
  ':',
  '\n',
  '\t',
  '\t',
  '\t',
  '\t',
  'p',
  'r',
  'i',
  'n',
  't',
  'f',
  '(',
  '"',
  '\\',
  't',
  '\'',
  '\\',
  '\\',
  '\\',
  '\'',
  '\'',
  '\\',
  'n',
  '"',
  ')',
  ';',
  '\n',
  '\t',
  '\t',
  '\t',
  '\t',
  'b',
  'r',
  'e',
  'a',
  'k',
  ';',
  '\n',
  '\t',
  '\t',
  '\t',
  'd',
  'e',
  'f',
  'a',
  'u',
  'l',
  't',
  ':',
  '\n',
  '\t',
  '\t',
  '\t',
  '\t',
  'p',
  'r',
  'i',
  'n',
  't',
  'f',
  '(',
  '"',
  '\\',
  't',
  '\'',
  '%',
  'c',
  '\'',
  ',',
  '\\',
  'n',
  '"',
  ',',
  'f',
  'u',
  'e',
  'n',
  't',
  'e',
  '[',
  'i',
  ']',
  ')',
  ';',
  '\n',
  '\t',
  '\t',
  '}',
  '\n',
  '\t',
  '}',
  '\n', 
  '\t',
  'p',
  'r',
  'i',
  'n',
  't',
  'f',
  '(',
  '"',
  '\\',
  't',
  '0',
  '\\',
  'n',
  '}',
  ';',
  '\\',
  'n',
  '\\',
  'n',
  '%',
  's',
  '\\',
  'n',
  '"',
  ',',
  'f',
  'u',
  'e',
  'n',
  't',
  'e',
  ')',
  ';',
  '\n',
  '\t',
  'r',
  'e',
  't',
  'u',
  'r',
  'n',
  ' ',
  '0',
  ';',
  '\n',
  '}',
  0
};

int main(){
  int i;
  printf("#include <stdio.h>\nchar fuente[] = {\n");
  for(i=0;fuente[i];i++){
    switch(fuente[i]){
      case '\n':
           printf("\t'\\n',\n");
           break;
      case '\t':
           printf("\t'\\t',\n");
           break; 
      case '\\':
           printf("\t'\\\\',\n");
           break; 
      case '\'':
           printf("\t'\\\'',\n");
           break; 
      default:
           printf("\t'%c',\n",fuente[i]);
    }
    
  }
  printf("\t0\n};\n\n%s\n",fuente);
  return 0;
}

0 comentarios:

Publicar un comentario

Seguidores

Estadisticas