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
निर्देशिका फ़ाइल है जिसे वर्तमान निर्देशिका में कहा जाता है। मैंने निम्नलिखित कमांड चलाकर इस पर पहले से ध्यान रखा (जो कि अधिकांश आधुनिक लिनक्स पर काम करना चाहिए):
ln -s `fc-match --format='%{file}' sans` ./q.ttf
(इसके बजाय अपने पसंदीदा ट्रू टाइप फ़ॉन्ट को आयात करने के लिए स्वतंत्र महसूस करें।)
प्रोग्राम को चलाने के बाद, इमेज आउटपुट को मौजूदा डायरेक्टरी में बनाया जाएगा, जिसका नाम एक फाइल होगा q.bmp
। दुर्भाग्य से विंडोज बिटमैप फाइलें केवल आउटपुट स्वरूप है जो यह प्रोग्राम प्रदान करता है। अधिक आउटपुट स्वरूप जोड़ने से अधिक पुस्तकालयों में लिंकिंग की आवश्यकता होगी।
ध्यान दें कि यह कार्यक्रम गैर-सरल शाब्दिक मूल्यों को पेश करने के लिए C99 के सिंटैक्स का लाभ उठाता है, इस प्रकार उन चर की संख्या को कम करता है जिन्हें परिभाषित करने की आवश्यकता होती है। यह ऐसी चीज है जिसका अधिक सी गोल्फर्स को फायदा उठाना चाहिए।