C99 (usando SDL y SDL_ttf), 414 354 346 - 15% de = 294,1
#include<SDL_ttf.h>
#define Q(P)char*q=#P;P
Q(
i=5;main(){for(SDL_Surface*s=SDL_SetVideoMode(2048,80,SDL_Init(SDL_INIT_VIDEO),TTF_Init());i--;SDL_SaveBMP(s,"q.bmp"))SDL_BlitSurface(TTF_RenderText_Blended(TTF_OpenFont("q.ttf",9),(char*[]){"#include<SDL_ttf.h>","#define Q(P)char*q=#P;P","Q(",q,")"}[i],(SDL_Color){~0}),0,s,&(SDL_Rect){0,16*i});}
)
Esto es bastante feo sin más saltos de línea, pero desafortunadamente necesitan estar ausentes. La función de representación de texto no incluye caracteres de control, por lo que cualquier salto de línea en el código debe representarse manualmente en la salida.
Aquí está el mismo código, pero con algunos saltos de línea adicionales para mayor legibilidad:
#include<SDL_ttf.h>
#define Q(P)char*q=#P;P
Q(
i=5;main(){for(SDL_Surface*s=SDL_SetVideoMode(2048,80,
SDL_Init(SDL_INIT_VIDEO),TTF_Init());i--;SDL_SaveBMP(s,"q.bmp"))
SDL_BlitSurface(TTF_RenderText_Blended(TTF_OpenFont("q.ttf",9),
(char*[]){"#include<SDL_ttf.h>","#define Q(P)char*q=#P;P","Q(",q,")"}[i],
(SDL_Color){~0}),0,s,&(SDL_Rect){0,16*i});}
)
Lamentablemente, esto tampoco agrega saltos de línea a la salida gráfica:
La salida sigue siendo legible, aunque con una salida de 9 puntos y el color de fuente rojo, es un poco entrecortada. Puedes mejorarlo a costa de un personaje reemplazando el 9
con 12
. (Tenga en cuenta que la dimensión de la imagen resultante está codificada a 2048x80. Para acomodar las diferencias en varias fuentes, se ha agregado un poco de exceso al margen derecho y al inicio, lo suficiente como para que una fuente de tamaño 12 aún se ajuste cómodamente Sin embargo, si desea aumentarlo aún más, es probable que también sea necesario modificar las dimensiones).
El comando para construir el programa es:
gcc -Wall -o imgquine imgquine.c -lSDL_ttf `sdl-config --cflags --libs`
El programa asume que hay un archivo de fuente llamado q.ttf
en el directorio actual cuando se ejecuta. Me ocupé de esto de antemano ejecutando el siguiente comando (que debería funcionar en la mayoría de los Linux modernos):
ln -s `fc-match --format='%{file}' sans` ./q.ttf
(No dude en importar su propia fuente TrueType favorita).
Después de ejecutar el programa, la salida de la imagen se creará en el directorio actual, en un archivo llamado q.bmp
. Lamentablemente, los archivos de mapa de bits de Windows son el único formato de salida que proporciona este programa. Agregar más formatos de salida requeriría vincular en más bibliotecas.
Tenga en cuenta que este programa aprovecha la sintaxis de C99 para introducir valores literales no simples, reduciendo así significativamente el número de variables que deben definirse. Esto es algo que más golfistas C deberían aprovechar.