C99 (przy użyciu SDL i 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});}
)
Jest to dość brzydkie bez kolejnych podziałów linii, ale niestety muszą być nieobecne. Funkcja renderowania tekstu w ogóle nie wykrywa znaków kontrolnych, więc wszelkie podziały wiersza w kodzie muszą być renderowane ręcznie na wyjściu.
Oto ten sam kod, ale z pewnymi dodatkowymi podziałami linii dla czytelności:
#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});}
)
Niestety nie powoduje to również podziału linii na wynik graficzny:
Wyjście jest nadal czytelne, choć przy 9-punktowym wydruku i czerwonym kolorze czcionki jest nieco zwięzłe. Możesz go ulepszyć kosztem postaci, zastępując 9
ją 12
. (Należy zauważyć, że wymiar wynikowego obrazu jest zakodowany na stałe do 2048 x 80. Aby uwzględnić różnice w różnych czcionkach, dodano odpowiedni nadmiar do prawego marginesu i na początku, na tyle, że czcionka o rozmiarze 12 powinna nadal wygodnie pasować Jeśli jednak chcesz go zwiększyć, wymiary prawdopodobnie będą również musiały zostać zmienione).
Polecenie do zbudowania programu to:
gcc -Wall -o imgquine imgquine.c -lSDL_ttf `sdl-config --cflags --libs`
Program zakłada, że q.ttf
po uruchomieniu plik czcionki jest wywoływany w bieżącym katalogu. Zadbałem o to wcześniej, uruchamiając następującą komendę (która powinna działać na większości współczesnych Linuksów):
ln -s `fc-match --format='%{file}' sans` ./q.ttf
(Zamiast tego możesz zaimportować swoją ulubioną czcionkę TrueType.)
Po uruchomieniu programu obraz wyjściowy zostanie utworzony w bieżącym katalogu, w pliku o nazwie q.bmp
. Niestety pliki bitmapowe systemu Windows są jedynym formatem wyjściowym udostępnianym przez ten program. Dodanie większej liczby formatów wyjściowych wymagałoby łączenia w większej liczbie bibliotek.
Zauważ, że ten program wykorzystuje składnię C99 do wprowadzania nieprostych wartości literalnych, co znacznie zmniejsza liczbę zmiennych, które należy zdefiniować. Jest to coś, z czego powinno skorzystać więcej golfistów C.