C99 ( en utilisant SDL & SDL_ttf), 414 354 346-15% = 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});}
)
C'est assez moche sans plus de sauts de ligne, mais malheureusement, ils doivent être absents. La fonction de rendu de texte ne bloque pas du tout les caractères de contrôle, donc tout saut de ligne dans le code doit être rendu manuellement dans la sortie.
Voici le même code mais avec quelques sauts de ligne supplémentaires pour plus de lisibilité:
#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});}
)
Malheureusement, cela n'ajoute pas non plus de sauts de ligne à la sortie graphique:
La sortie est toujours lisible, mais avec une sortie à 9 points et la couleur de police rouge, c'est un peu loufoque. Vous pouvez l'améliorer au détriment d'un personnage en remplaçant le 9
par 12
. (Notez que la dimension de l'image résultante est codée en dur à 2048x80. Pour tenir compte des différences dans les différentes polices, un peu d'excès a été ajouté à la marge de droite et à l'interlignage, suffisamment pour qu'une police de taille 12 soit toujours confortable. Cependant, si vous souhaitez l'augmenter encore, les dimensions devront probablement être également modifiées.)
La commande pour construire le programme est:
gcc -Wall -o imgquine imgquine.c -lSDL_ttf `sdl-config --cflags --libs`
Le programme suppose qu'il existe un fichier de police appelé q.ttf
dans le répertoire en cours lors de l'exécution. J'ai pris soin de cela au préalable en exécutant la commande suivante (qui devrait fonctionner sur la plupart des Linux modernes):
ln -s `fc-match --format='%{file}' sans` ./q.ttf
(N'hésitez pas à importer votre propre police TrueType préférée à la place.)
Après avoir exécuté le programme, la sortie d'image sera créée dans le répertoire courant, dans un fichier nommé q.bmp
. Malheureusement, les fichiers bitmap Windows sont le seul format de sortie fourni par ce programme. L'ajout de formats de sortie supplémentaires nécessiterait une liaison dans davantage de bibliothèques.
Notez que ce programme tire parti de la syntaxe de C99 pour introduire des valeurs littérales non simples, réduisant ainsi considérablement le nombre de variables à définir. C'est quelque chose dont plus de golfeurs C devraient profiter.