अंतर्राष्ट्रीय अस्पष्ट सी कोड प्रतियोगिता

इंटरनेशनल ऑबफ्यूस्केटेड सी कोड प्रतियोगिता (संक्षिप्त IOCCC) सबसे रचनात्मक रूप से अस्पष्ट कोड C (प्रोग्रामिंग भाषा) स्रोत कोड के लिए एक कंप्यूटर प्रोग्रामिंग प्रतियोगिता है। वार्षिक रूप से आयोजित, इसे [सी] की वाक्य-विन्यास अपारदर्शिता का जश्न मनाने के रूप में वर्णित किया गया है। 2020 में आयोजित 27वीं प्रतियोगिता के लिए विजेता कोड जुलाई 2020 में जारी किया गया था। पिछली प्रतियोगिताएं 1984-1996, 1998, 2000, 2001, 2004-2006, 2011-2015 और 2018-2020 में आयोजित की गई थीं।

न्यायाधीशों के एक पैनल द्वारा प्रविष्टियों का मूल्यांकन गुमनाम रूप से किया जाता है। निर्णय प्रक्रिया को प्रतियोगिता दिशानिर्देशों में प्रलेखित किया गया है और उन्मूलन दौर के होते हैं। परंपरा के अनुसार, प्रत्येक प्रतियोगिता के लिए प्रविष्टियों की कुल संख्या के बारे में कोई सूचना नहीं दी जाती है। जीतने वाली प्रविष्टियों को सी प्रीप्रोसेसर का वर्स्ट एब्यूज या मोस्ट एरेटिक बिहेवियर जैसी श्रेणी से सम्मानित किया जाता है, और फिर आधिकारिक IOCCC वेबसाइट पर इसकी घोषणा की जाती है। प्रतियोगिता में कहा गया है कि IOCCC वेबसाइट पर घोषित किया जाना जीत का इनाम है।

इतिहास
IOCCC की शुरुआत लैंडन कर्ट नोल और लैरी बासेल ने 1984 में नेशनल सेमीकंडक्टर के जेनिक्स पोर्टिंग ग्रुप में काम करते हुए की थी। प्रतियोगिता के लिए विचार तब आया जब उन्होंने कुछ खराब लिखे गए कोड के बारे में एक दूसरे के साथ नोट्स की तुलना की, जिसे उन्हें ठीक करना था, विशेष रूप से बॉर्न शेल, जो ALGOL 68 सिंटैक्स का अनुकरण करने के लिए मैक्रोज़ का उपयोग करता था, और बीएसडी के लिए उंगली (यूनिक्स) का एक बग्गी संस्करण। प्रतियोगिता ही 1993 के कंप्यूटर बाउल में प्रश्नोत्तरी प्रश्न का विषय थी। 2006 में शुरू होने वाले पांच वर्षों के अंतराल के बाद, प्रतियोगिता 2011 में लौटी। अन्य प्रोग्रामिंग प्रतियोगिताओं की तुलना में, IOCCC को डॉ. डॉब के जर्नल के संपादक माइकल स्वेन (तकनीकी लेखक) द्वारा इतना गंभीर नहीं बताया गया है।

नियम
प्रत्येक वर्ष, प्रतियोगिता के नियम IOCCC की वेबसाइट पर प्रकाशित किए जाते हैं। सभी सामग्री Creative Commons लाइसेंस Share-alike|BY-SA 3.0 Unported के तहत प्रकाशित की गई है। नियम साल-दर-साल बदलते रहते हैं और दिशानिर्देशों के एक सेट के साथ पोस्ट किए जाते हैं जो नियमों की भावना को व्यक्त करने का प्रयास करते हैं।

"Hacking the contest rules is a tradition. — Landon Curt Noll, 2011"

नियमों को अक्सर जानबूझकर खामियों के साथ लिखा जाता है कि प्रतियोगियों को खोजने और दुरुपयोग करने के लिए प्रोत्साहित किया जाता है। कमियों का लाभ उठाने वाली प्रविष्टियाँ अगले वर्ष की प्रतियोगिता के नियमों को समायोजित करने का कारण बन सकती हैं।

रुकावटें नियोजित
प्रविष्टियाँ अक्सर अजीब या असामान्य तरकीबों का इस्तेमाल करती हैं, जैसे कि C प्रीप्रोसेसर का उपयोग उन चीजों को करने के लिए करना जिन्हें करने के लिए इसे डिज़ाइन नहीं किया गया था (कुछ मामलों में शानदार ढंग से, डॉ. डॉब्स के अनुसार, सी प्रीप्रोसेसर में एक 11-बिट अंकगणितीय तर्क इकाई बनाने वाली एक प्रविष्टि के साथ ), या सी प्रोग्रामिंग भाषा में सामान्य रूप से उपयोग किए जाने वाले निर्माणों से बचने के लिए एक ही चीज़ को प्राप्त करने के अधिक अस्पष्ट तरीकों के पक्ष में।

योगदान में एएससीआईआई कला के तरीके के बाद छवियों, पाठ आदि के समान स्वरूपित स्रोत कोड शामिल है, कोड को पढ़ने के लिए कठिन बनाने के लिए प्रीप्रोसेसर पुनर्वितरण, और स्व-संशोधित कोड। कई वर्षों में, एक प्रविष्टि प्रस्तुत की गई थी जिसके लिए अगले वर्ष के कुछ नियमों की एक नई परिभाषा की आवश्यकता थी। यह एक उच्च सम्मान के रूप में माना जाता है। इसका एक उदाहरण दुनिया का सबसे छोटा क्विन (कंप्यूटिंग)|स्व-पुनरुत्पादन कार्यक्रम है। प्रविष्टि अपने स्वयं के स्रोत कोड को आउटपुट करने के लिए डिज़ाइन किया गया एक प्रोग्राम था, और जिसमें स्रोत कोड के शून्य बाइट थे। जब प्रोग्राम चल रहा था, तो यह अपने स्रोत कोड के बराबर शून्य बाइट्स प्रिंट करता था। अस्पष्टता को अपने चरम सीमा तक ले जाने के प्रयास में, प्रतियोगियों ने ऐसे प्रोग्राम तैयार किए हैं जो सी मानकों के किनारों के चारों ओर स्कर्ट करते हैं, या ऐसे निर्माण होते हैं जो संकलक में शायद ही कभी उपयोग किए जाने वाले कोड पथ संयोजनों को ट्रिगर करते हैं। परिणामस्वरूप, पिछली कई प्रविष्टियाँ आधुनिक कंपाइलर में सीधे संकलित नहीं हो सकती हैं, और कुछ क्रैश का कारण बन सकती हैं।

उदाहरण
केवल कुछ किलोबाइट्स की कोड आकार सीमा के भीतर, प्रतियोगियों ने जटिल चीजें करने में कामयाबी हासिल की - 2004 के विजेता ने एक ऑपरेटिंग सिस्टम को बदल दिया।

टोलेडो नैनोचेस
Toledo Nanochess मैक्सिकन सॉफ्टवेयर डेवलपर ऑस्कर Toledo Gutiérrez, IOCCC के पांच बार विजेता द्वारा बनाया गया एक शतरंज इंजन है। IOCCC नियमों के अनुसार, यह 1255 वर्ण लंबा है। लेखक का दावा है कि यह सी भाषा में लिखा गया दुनिया का सबसे छोटा शतरंज कार्यक्रम है।

Toledo Nanochess और अन्य इंजनों के लिए स्रोत कोड उपलब्ध है। क्योंकि Toledo Nanochess 18वें IOCCC (सर्वश्रेष्ठ खेल) से टोलेडो की विजयी प्रविष्टि पर आधारित है ), यह भारी अस्पष्ट कोड है। 2 फरवरी 2014 को, लेखक ने Toledo Nanochess: The Commented Source Code पुस्तक प्रकाशित की, जिसमें पूरी तरह से टिप्पणी स्रोत कोड शामिल है। 7 फरवरी, 2010 तक, यह केवल दो शतरंज इंजनों में से एक प्रतीत होता है, जो 2 किलोबाइट्स से कम में लिखा गया है, जो डच भौतिक विज्ञानी एचजी मुलर द्वारा माइक्रो-मैक्स के साथ पूर्ण कानूनी शतरंज चालें चलाने में सक्षम हैं। 2014 में सुपर माइक्रो शतरंज ने 1 किलोबाइट के बैरियर को तोड़ा था - माइक्रो-मैक्स का एक व्युत्पन्न - कुल 760 वर्ण (रिक्त स्थान और न्यूलाइन शामिल)। टोलेडो के इंजन का एक छोटा संस्करण भी है, टोलेडो पिकोचेस, जिसमें 944 गैर-रिक्त वर्ण शामिल हैं।

'स्रोत कोड अंश'

पाई
नीचे 1988 की एक प्रविष्टि है जो अपने क्षेत्र को देखकर पाई की गणना करती है:

(यह प्रविष्टि K&R C में लिखी गई थी; यह कुछ बदलावों के बिना ANSI C में ठीक से काम नहीं करती है। )

उड़ान सिम्युलेटर
एक अन्य उदाहरण निम्नलिखित उड़ान सिम्युलेटर है, जो 1998 IOCCC का विजेता है, परिकलित दांव: कंप्यूटर, जुआ और जीतने के लिए गणितीय मॉडलिंग (2001) में सूचीबद्ध और वर्णित के रूप में और नीचे दिखाया गया है:

इस प्रोग्राम को संकलित करने के लिए लिनक्स सिस्टम पर निम्न कमांड लाइन की आवश्यकता है:  cc banks.c -o banks -DIT=XK_Page_Up -DDT=XK_Page_Down \ -DUP=XK_Up -DDN=XK_Down -DLT=XK_Left -DRT=XK_Right \ -डीसीएस=XK_रिटर्न -डीडीटी=0.02 -एलएम -एलएक्स11 -एल/यूएसआर/एक्स11आर6/लिब 

बाइनरी फ़ाइल चलाने के लिए (banks) इसे एक के साथ आपूर्ति की जानी है .sc दृश्य फ़ाइल मानक इनपुट के माध्यम से|stdin इनपुट:

अकरी
नीचे एक 2011 प्रविष्टि है जो डॉन, यांग द्वारा एक एसीआईआई छवि को कम करती है:

यदि प्रोग्राम इनपुट के रूप में अपने स्वयं के स्रोत का उपयोग करके चलाया जाता है, तो परिणाम है:

यह भी देखें

 * उलझी हुई पर्ल प्रतियोगिता
 * गुप्त सी प्रतियोगिता
 * गूढ़ प्रोग्रामिंग भाषा