C99 (sử dụng 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});}
)
Điều này là khá xấu xí mà không có nhiều ngắt dòng, nhưng tiếc là họ cần phải vắng mặt. Hàm kết xuất văn bản hoàn toàn không điều khiển các ký tự điều khiển, do đó, bất kỳ ngắt dòng nào trong mã phải được hiển thị thủ công ở đầu ra.
Đây là cùng một mã nhưng với một số ngắt dòng bổ sung được ném vào cho mức độ dễ đọc:
#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});}
)
Đáng buồn thay, điều này cũng không thêm ngắt dòng vào đầu ra đồ họa:
Đầu ra vẫn rõ ràng, mặc dù với đầu ra 9 điểm và màu phông chữ đỏ, nó hơi khó nhìn. Bạn có thể cải thiện nó với chi phí của một nhân vật bằng cách thay thế 9
bằng 12
. (Lưu ý rằng kích thước của hình ảnh thu được được mã hóa thành 2048x80. Để phù hợp với sự khác biệt về các phông chữ khác nhau, một chút dư thừa đã được thêm vào lề phải và hàng đầu, đủ để phông chữ cỡ 12 vẫn phù hợp thoải mái Tuy nhiên, nếu bạn muốn tăng thêm, tuy nhiên, kích thước có thể cũng sẽ cần phải được thay đổi.)
Lệnh để xây dựng chương trình là:
gcc -Wall -o imgquine imgquine.c -lSDL_ttf `sdl-config --cflags --libs`
Chương trình giả định rằng có một tệp phông chữ được gọi q.ttf
trong thư mục hiện tại khi chạy. Tôi đã xử lý vấn đề này trước bằng cách chạy lệnh sau (sẽ hoạt động trên hầu hết các Linux hiện đại):
ln -s `fc-match --format='%{file}' sans` ./q.ttf
(Thay vào đó, vui lòng nhập phông chữ TrueType yêu thích của bạn.)
Sau khi chạy chương trình, đầu ra hình ảnh sẽ được tạo trong thư mục hiện tại, trong một tệp có tên q.bmp
. Thật không may, các tệp bitmap của Windows là định dạng đầu ra duy nhất mà chương trình này cung cấp. Thêm nhiều định dạng đầu ra sẽ yêu cầu liên kết trong nhiều thư viện hơn.
Lưu ý rằng chương trình này tận dụng cú pháp của C99 để giới thiệu các giá trị theo nghĩa đen không đơn giản, do đó giảm đáng kể số lượng biến cần xác định. Đây là điều mà nhiều người chơi golf C nên tận dụng.