C99 (SDL ve SDL_ttf kullanılarak), 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});}
)
Bu, daha fazla satır kesmesi olmadan oldukça çirkin, fakat ne yazık ki yok olmaları gerekiyor. Metin oluşturma işlevi kontrol karakterlerini hiç doldurmaz, bu nedenle koddaki satır sonları çıktıda manuel olarak oluşturulmalıdır.
İşte aynı kod, ancak okunabilirlik için atılan bazı ekstra satır sonları ile:
#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});}
)
Ne yazık ki, bu grafik çıktısına satır kesmeleri de eklemiyor:
Çıktı hala okunaklı, ancak 9 nokta çıktı ve kırmızı yazı tipi rengiyle biraz sivri. Sen değiştirerek bir karakter pahasına bunu artırabilir 9
ile 12
. (Elde edilen görüntünün boyutunun 2048x80'e kodlanmış olduğunu unutmayın. Çeşitli yazı tiplerindeki farklılıkları karşılamak için, sağ kenar boşluğuna ve satır başlığına adil bir miktar fazlalık eklendi, böylece bir boyut-12 yazı tipi hala rahatça sığacak kadar Ancak, onu daha da artırmak istiyorsanız, boyutların da muhtemelen değişmesi gerekecektir.)
Programı oluşturma komutu:
gcc -Wall -o imgquine imgquine.c -lSDL_ttf `sdl-config --cflags --libs`
Program q.ttf
, çalıştırıldığında geçerli dizinde adı verilen bir font dosyası olduğunu varsayar . Bunu daha önce aşağıdaki komutu çalıştırarak (çoğu modern Linux'ta çalışması gerekir) yürüttüm:
ln -s `fc-match --format='%{file}' sans` ./q.ttf
(Bunun yerine kendi favori TrueType yazı tipinizi almaktan çekinmeyin.)
Programı çalıştırdıktan sonra, görüntü çıktısı geçerli dizinde, adlandırılmış bir dosyada oluşturulur q.bmp
. Ne yazık ki Windows bitmap dosyaları bu programın sağladığı tek çıktı biçimidir. Daha fazla çıktı biçimi eklemek, daha fazla kütüphanede bağlantı kurmayı gerektirir.
Bu programın basit olmayan değişmez değerleri tanıtmak için C99'un sözdiziminden faydalandığını ve böylece tanımlanması gereken değişken sayısını önemli ölçüde azalttığını unutmayın. Bu daha C golfçülerinin yararlanabileceği bir şey.