C99 (використовуючи 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});}
)
Це досить потворно, без більше розривів рядків, але, на жаль, вони повинні бути відсутніми. Функція візуалізації тексту взагалі не обробляє символи керування, тому будь-які розриви рядків у коді повинні бути виведені вручну у висновку.
Ось той самий код, але з деякими додатковими перервами рядків, що додаються для розбірливості:
#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});}
)
На жаль, це також не додає розривів рядків до графічного виводу:
Вихід все ще розбірливий, хоча з 9-кратним виходом та червоним кольором шрифту він трохи скупий. Ви можете поліпшити його за рахунок характеру шляхом заміни 9
з 12
. (Зверніть увагу, що розмір отриманого зображення жорстко закодований до 2048х80. Для урахування відмінностей у різних шрифтах до правої межі та провідної частини додано неабиякий надлишок, щоб шрифт розміру-12 мав усе ще зручно розміщуватись Однак, якщо ви хочете додатково її збільшити, розміри, ймовірно, потрібно буде також змінити.)
Команда для складання програми:
gcc -Wall -o imgquine imgquine.c -lSDL_ttf `sdl-config --cflags --libs`
Програма передбачає, що q.ttf
в поточному каталозі при запуску є файл шрифту, який викликається . Я заздалегідь подбав про це, виконавши таку команду (яка повинна працювати на більшості сучасних Linux):
ln -s `fc-match --format='%{file}' sans` ./q.ttf
(Не соромтеся імпортувати власний улюблений шрифт TrueType.)
Після запуску програми вихід зображення буде створено у поточному каталозі у файлі з назвою q.bmp
. На жаль, файли растрових файлів Windows - єдиний вихідний формат, який надає ця програма. Додавання більшої кількості вихідних форматів потребує зв’язування в більшості бібліотек.
Зауважте, що ця програма використовує перевагу синтаксису C99 для введення непростих буквальних значень, тим самим значно зменшуючи кількість змінних, які потрібно визначити. Це те, чим варто скористатися більше гольфістів на C.