परिचय
आप शायद जिप बम , एक्सएमएल बम आदि से परिचित हैं । सीधे शब्दों में कहें, तो वे (अपेक्षाकृत) छोटी फाइलें होती हैं, जो भोले-भाले सॉफ़्टवेयर द्वारा व्याख्या किए जाने पर बहुत अधिक उत्पादन करती हैं। यहां चुनौती एक कंपाइलर को उसी तरह से गाली देना है।
चुनौती
कुछ स्रोत कोड लिखें, जो 512 बाइट्स या उससे कम पर कब्जा कर लेता है और जो एक फ़ाइल में संकलित करता है जो सबसे अधिक संभव स्थान रखता है। सबसे बड़ा आउटपुट फ़ाइल जीतता है!
नियम
ठीक है, इसलिए कुछ महत्वपूर्ण स्पष्टीकरण, परिभाषाएं और प्रतिबंध हैं;
- संकलन का आउटपुट एक ELF फ़ाइल, एक Windows पोर्टेबल निष्पादन योग्य (.exe) होना चाहिए , या JVM या .Net के CLR के लिए वर्चुअल बाईटेकोड (यदि पूछा जाए तो अन्य प्रकार के वर्चुअल बायोटेक भी ठीक होने की संभावना है)। अपडेट: पायथन का .pyc / .pyo आउटपुट भी मायने रखता है ।
- यदि आपकी भाषा-पसंद को सीधे उन प्रारूपों में से एक में संकलित नहीं किया जा सकता है, तो संकलन के बाद होने वाले ट्रांसप्लीकेशन की भी अनुमति है ( अपडेट: आप कई बार ट्रांसपाइल कर सकते हैं, बस इतनी देर तक जब आप एक ही भाषा का एक से अधिक बार उपयोग नहीं करते हैं )।
- आपके स्रोत कोड में कई फाइलें और यहां तक कि संसाधन फाइलें शामिल हो सकती हैं, लेकिन इन सभी फाइलों का सार आकार 512 बाइट्स से अधिक नहीं होना चाहिए।
- आप अपनी स्रोत फ़ाइल (ओं) और अपनी भाषा के मानक पुस्तकालय की तुलना में किसी अन्य इनपुट का उपयोग नहीं कर सकते। स्टैटिक लिंकिंग स्टैण्डर्ड लाइब्रेरियाँ ठीक है जब यह समर्थित है। विशेष रूप से, कोई तृतीय पक्ष लाइब्रेरी या OS लाइब्रेरी नहीं है।
- आदेश या आदेशों की श्रृंखला का उपयोग करके अपने संकलन को लागू करना संभव होगा। यदि आपको संकलन करते समय विशिष्ट झंडे की आवश्यकता होती है, तो ये आपकी बाइट सीमा की ओर गिनते हैं (जैसे कि यदि आपका संकलन लाइन है
gcc bomb.c -o bomb -O3 -lm
, तो-O3 -lm
भाग (7 बाइट्स) की गणना की जाएगी (ध्यान दें कि प्रारंभिक अग्रणी स्थान की गिनती नहीं की गई है)। - प्रीप्रोसेसर को केवल तभी अनुमति दी जाती है जब वे आपकी भाषा के लिए एक मानक संकलन विकल्प हों।
- पर्यावरण आप पर निर्भर है, लेकिन इस सत्य को बनाने के हितों में, कृपया हाल के (यानी उपलब्ध) संकलक संस्करणों और ऑपरेटिंग सिस्टम (और स्पष्ट रूप से जो आप उपयोग कर रहे हैं) निर्दिष्ट करें।
- यह त्रुटियों के बिना संकलित होना चाहिए (चेतावनियां ठीक हैं), और संकलक को क्रैश करना किसी भी चीज के लिए गणना नहीं करता है।
- क्या अपने कार्यक्रम वास्तव में करता है अप्रासंगिक है, हालांकि यह कुछ भी दुर्भावनापूर्ण नहीं हो सकता। यह भी शुरू करने में सक्षम होने की जरूरत नहीं है।
उदाहरण 1
सी कार्यक्रम
main(){return 1;}
Apple LLVM version 7.0.2 (clang-700.1.81)
OS X 10.11 (64-बिट) पर संकलित :
clang bomb.c -o bomb -pg
9228 बाइट्स की एक फ़ाइल का उत्पादन करता है। कुल स्रोत का आकार 17 + 3 (के लिए -pg
) = 20 बाइट्स है, जो आसानी से आकार सीमा के भीतर है।
उदाहरण 2
ब्रेनफक कार्यक्रम:
++++++[->++++++++++++<]>.----[--<+++>]<-.+++++++..+++.[--->+<]>-----.--
-[-<+++>]<.---[--->++++<]>-.+++.------.--------.-[---<+>]<.[--->+<]>-.
के साथ c में awib के साथ संचरित :
./awib < bomb.bf > bomb.c
फिर Apple LLVM version 7.0.2 (clang-700.1.81)
OS X 10.11 (64-बिट) पर संकलित :
clang bomb.c
8464 बाइट्स की एक फ़ाइल का उत्पादन करता है। यहां कुल इनपुट 143 बाइट्स है (क्योंकि @lang_c
ओबेर के लिए डिफ़ॉल्ट यह स्रोत फ़ाइल में जोड़ने की आवश्यकता नहीं है, और कमांड पर कोई विशेष झंडे नहीं हैं)।
इस बात पर भी ध्यान दें कि इस मामले में, अस्थायी बॉम्बे फ़ाइल फ़ाइल 802 बाइट्स है, लेकिन यह न तो स्रोत आकार और न ही आउटपुट आकार की ओर गिना जाता है।
अंतिम नोट
यदि 4GB से अधिक का आउटपुट प्राप्त किया जाता है (शायद अगर किसी को ट्यूरिंग पूर्ण प्रीप्रोसेसर मिल जाए), तो प्रतियोगिता सबसे छोटे स्रोत के लिए होगी जो कम से कम उस आकार की फ़ाइल का उत्पादन करता है (यह सबमिशन का परीक्षण करने के लिए व्यावहारिक नहीं है जो बहुत बड़ा हो जाता है) ।