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
. (Обратите внимание, что размер получающегося изображения жестко закодирован до 2048x80. Чтобы учесть различия в различных шрифтах, к правому краю и начальному значению было добавлено немало избыточного, достаточного для того, чтобы шрифт размера 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 должны использовать в своих интересах.