C99 (utilizzando SDL e 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});}
)
Questo è piuttosto brutto senza più interruzioni di riga, ma purtroppo devono essere assenti. La funzione di rendering del testo non controlla affatto i caratteri di controllo, quindi qualsiasi interruzione di riga nel codice deve essere renderizzata manualmente nell'output.
Ecco lo stesso codice ma con alcune interruzioni di riga in più per la leggibilità:
#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});}
)
Purtroppo, questo non aggiunge anche interruzioni di linea all'output grafico:
L'output è ancora leggibile, anche se con un output a 9 punti e il colore del carattere rosso, è un po 'squilibrato. Puoi migliorarlo al costo di un personaggio sostituendo il 9
con 12
. (Si noti che la dimensione dell'immagine risultante è hardcoded a 2048x80. Per compensare le differenze nei vari tipi di carattere, è stato aggiunto un bel po 'di eccesso al margine destro e all'inizio, abbastanza in modo che un carattere di dimensione 12 dovrebbe comunque adattarsi comodamente Se desideri aumentarlo ulteriormente, tuttavia, probabilmente anche le dimensioni dovranno essere modificate.)
Il comando per compilare il programma è:
gcc -Wall -o imgquine imgquine.c -lSDL_ttf `sdl-config --cflags --libs`
Il programma presuppone che ci sia un file di font chiamato q.ttf
nella directory corrente quando eseguito. Mi sono occupato in anticipo di questo eseguendo il seguente comando (che dovrebbe funzionare sulla maggior parte dei Linux moderni):
ln -s `fc-match --format='%{file}' sans` ./q.ttf
(Sentiti libero di importare invece il tuo font TrueType preferito.)
Dopo aver eseguito il programma, l'output dell'immagine verrà creato nella directory corrente, in un file denominato q.bmp
. Purtroppo i file bitmap di Windows sono l'unico formato di output fornito da questo programma. L'aggiunta di più formati di output richiederebbe il collegamento in più librerie.
Si noti che questo programma sfrutta la sintassi di C99 per l'introduzione di valori letterali non semplici, riducendo così in modo significativo il numero di variabili che devono essere definite. Questo è qualcosa di cui molti golfisti C dovrebbero trarre vantaggio.