C99 (unter Verwendung von 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});}
)
Das ist ziemlich hässlich ohne weitere Zeilenumbrüche, aber leider müssen sie fehlen. Die Text-Rendering-Funktion blockiert keine Steuerzeichen, sodass Zeilenumbrüche im Code in der Ausgabe manuell gerendert werden müssen.
Hier ist derselbe Code, jedoch mit einigen zusätzlichen Zeilenumbrüchen zur besseren Lesbarkeit:
#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});}
)
Leider werden der grafischen Ausgabe dadurch keine Zeilenumbrüche hinzugefügt:
Die Ausgabe ist immer noch lesbar, aber mit 9-Punkt-Ausgabe und der roten Schriftfarbe ist es ein bisschen schärfer. Sie können es auf Kosten eines Charakters verbessern durch Ersetzen der 9
mit12
. (Beachten Sie, dass die Abmessung des resultierenden Bildes auf 2048 x 80 fest codiert ist. Um den Unterschieden bei den verschiedenen Schriftarten Rechnung zu tragen, wurde am rechten Rand und am Zeilenabstand einiges an Übermaß hinzugefügt, sodass eine Schrift der Größe 12 immer noch bequem passen sollte Wenn Sie den Wert jedoch weiter erhöhen möchten, müssen wahrscheinlich auch die Abmessungen geändert werden.)
Der Befehl zum Erstellen des Programms lautet:
gcc -Wall -o imgquine imgquine.c -lSDL_ttf `sdl-config --cflags --libs`
Das Programm geht davon aus, dass sich q.ttf
im aktuellen Verzeichnis eine Schriftdatei befindet, die beim Ausführen aufgerufen wird. Ich habe mich zuvor darum gekümmert, indem ich den folgenden Befehl ausgeführt habe (der auf den meisten modernen Linuxen funktionieren sollte):
ln -s `fc-match --format='%{file}' sans` ./q.ttf
(Sie können stattdessen auch Ihre eigene TrueType-Lieblingsschriftart importieren.)
Nach dem Ausführen des Programms wird die Bildausgabe im aktuellen Verzeichnis in einer Datei mit dem Namen erstellt q.bmp
. Leider sind Windows-Bitmap-Dateien das einzige Ausgabeformat, das dieses Programm bietet. Das Hinzufügen weiterer Ausgabeformate würde das Verknüpfen weiterer Bibliotheken erfordern.
Beachten Sie, dass dieses Programm die Syntax von C99 nutzt, um nicht einfache Literalwerte einzufügen, wodurch die Anzahl der zu definierenden Variablen erheblich reduziert wird. Dies ist etwas, das mehr C-Golfer ausnutzen sollten.