प्रतिस्पर्धी प्रोग्रामिंग

प्रतिस्पर्धी प्रोग्रामिंग (जिसे स्पोर्ट्स प्रोग्रामिंग के रूप में भी जाना जाता है) आमतौर पर इंटरनेट या स्थानीय नेटवर्क पर आयोजित एक दिमागी खेल है, जिसमें प्रतिभागियों को दिए गए विनिर्देशों के अनुसार कंप्यूटर प्रोग्रामिंग की कोशिश करना शामिल है। प्रतियोगियों को खेल प्रोग्रामर कहा जाता है। प्रतिस्पर्धी प्रोग्रामिंग को कई बहुराष्ट्रीय सॉफ्टवेयर और इंटरनेट कंपनियों, जैसे Google द्वारा मान्यता प्राप्त और समर्थित है और फेसबुक। एक प्रोग्रामिंग प्रतियोगिता में आम तौर पर मेजबान शामिल होता है जो तार्किक या गणितीय समस्याओं का एक सेट प्रस्तुत करता है, जिसे पहेली या चुनौतियों के रूप में भी जाना जाता है, प्रतियोगियों के लिए (जो दसियों या सैकड़ों से कई हजारों की संख्या में भिन्न हो सकते हैं)। प्रतियोगियों को इन समस्याओं को हल करने में सक्षम कंप्यूटर प्रोग्राम लिखने की आवश्यकता होती है। जजिंग ज्यादातर हल की गई समस्याओं की संख्या और सफल समाधान लिखने में लगने वाले समय पर आधारित होती है, लेकिन इसमें अन्य कारक भी शामिल हो सकते हैं (उत्पादित आउटपुट की गुणवत्ता, निष्पादन समय, मेमोरी उपयोग, प्रोग्राम का आकार, आदि)।

इतिहास
ज्ञात सबसे पुरानी प्रतियोगिताओं में से एक अंतर्राष्ट्रीय कॉलेजिएट प्रोग्रामिंग प्रतियोगिता (आईसीपीसी) है जो 1970 के दशक में उत्पन्न हुई थी, और इसके 2011 संस्करण में 88 देशों को शामिल करने के लिए बढ़ी है।

1990 से 1994 तक, ओवेन एस्ट्राचन, विवेक खेरा और डेविड कोटज़ ने ICPC से प्रेरित पहली वितरित, इंटरनेट-आधारित प्रोग्रामिंग प्रतियोगिताओं में से एक का संचालन किया। प्रतिस्पर्धी प्रोग्रामिंग में रुचि 2000 के बाद से हजारों प्रतिभागियों (#उल्लेखनीय प्रतियोगिताओं को देखें) में बड़े पैमाने पर बढ़ी है, और इंटरनेट के विकास से मजबूती से जुड़ी हुई है, जो भौगोलिक समस्याओं को दूर करते हुए अंतरराष्ट्रीय प्रतियोगिताओं को ऑनलाइन आयोजित करने की सुविधा प्रदान करती है।

सिंहावलोकन
प्रतिस्पर्धी प्रोग्रामिंग का उद्देश्य उन कंप्यूटर प्रोग्रामों के स्रोत कोड लिखना है जो दी गई समस्याओं को हल करने में सक्षम हैं। प्रोग्रामिंग प्रतियोगिताओं में दिखाई देने वाली अधिकांश समस्याएं गणितीय या तार्किक प्रकृति की होती हैं। विशिष्ट ऐसे कार्य निम्न श्रेणियों में से एक हैं: संयोजन विज्ञान, संख्या सिद्धांत, ग्राफ सिद्धांत, कलन विधि  खेल सिद्धांत, कम्प्यूटेशनल ज्यामिति, स्ट्रिंग (कंप्यूटर विज्ञान) और डेटा संरचनाएं। कुछ प्रतियोगिताओं में  बाधा प्रोग्रामिंग  और  कृत्रिम होशियारी  से संबंधित समस्याएं भी लोकप्रिय हैं।

समस्या श्रेणी के बावजूद, किसी समस्या को हल करने की प्रक्रिया को दो व्यापक चरणों में विभाजित किया जा सकता है: एक कुशल एल्गोरिथ्म का निर्माण, और एल्गोरिदम को एक उपयुक्त प्रोग्रामिंग भाषा में लागू करना (अनुमत प्रोग्रामिंग भाषाओं का सेट प्रतियोगिता से प्रतियोगिता में भिन्न होता है)। प्रोग्रामिंग प्रतियोगिताओं में ये दो सबसे अधिक परीक्षण किए गए कौशल हैं।

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

ऑनलाइन न्यायाधीश ऑनलाइन वातावरण होते हैं जिसमें परीक्षण होता है। ऑनलाइन न्यायाधीशों के पास रैंकलिस्ट हैं जो उपयोगकर्ताओं को किसी विशेष समस्या के लिए स्वीकृत समाधानों की सबसे बड़ी संख्या और/या कम से कम निष्पादन समय दिखाते हैं।

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

आर्टिफिशियल इंटेलिजेंस और मशीन लर्निंग

 * कागल - डेटा साइंस और मशीन लर्निंग प्रतियोगिताएं।
 * कोडकप - बोर्ड गेम एआई प्रतियोगिता 2003 से प्रतिवर्ष आयोजित की जाती है। खेल के नियम सितंबर में प्रकाशित होते हैं और अंतिम टूर्नामेंट जनवरी में आयोजित किया जाता है। * Google AI चुनौती - 2009 से 2011 तक चलने वाले छात्रों के लिए द्वि-वार्षिक प्रतियोगिताएं।
 * हैलाइट एआई प्रोग्रामिंग प्रतियोगिता - टू सिग्मा, कॉर्नेल टेक द्वारा प्रायोजित एआई प्रोग्रामिंग चुनौती, और गूगल।
 * रूसी एआई कप - ओपन आर्टिफिशियल इंटेलिजेंस प्रोग्रामिंग प्रतियोगिता।
 * कोडिनगेम - मौसमी बॉट प्रोग्रामिंग प्रतियोगिताओं का आयोजन करता है।

मुक्त स्रोत प्रौद्योगिकियों पर केंद्रित प्रतियोगिताएं

 * सूची अधूरी हो सकती है

ऑनलाइन प्लेटफॉर्म
दुनिया भर के प्रोग्रामिंग समुदाय ने प्रतिस्पर्धी प्रोग्रामिंग के लिए समर्पित कई इंटरनेट-संसाधनों को बनाया और बनाए रखा है। वे मामूली पुरस्कारों के साथ या उनके बिना स्टैंडअलोन प्रतियोगिताओं की पेशकश करते हैं। साथ ही समस्याओं के पिछले संग्रह प्रतिस्पर्धी प्रोग्रामिंग में प्रशिक्षण के लिए एक लोकप्रिय संसाधन हैं। ऐसे कई संगठन हैं जो नियमित रूप से प्रोग्रामिंग प्रतियोगिताओं की मेजबानी करते हैं। इसमे शामिल है:

लाभ और आलोचना
प्रोग्रामिंग प्रतियोगिताओं में भाग लेने से कंप्यूटर विज्ञान की पढ़ाई के लिए छात्रों का उत्साह बढ़ सकता है। ICPC जैसी प्रोग्रामिंग प्रतियोगिताओं में अर्जित कौशल भी कैरियर की संभावनाओं में सुधार करते हैं, क्योंकि वे तकनीकी साक्षात्कारों को पास करने में मदद करते हैं, जिसके लिए अक्सर उम्मीदवारों को जटिल प्रोग्रामिंग और एल्गोरिथम समस्याओं को मौके पर हल करने की आवश्यकता होती है। विशेष रूप से पेशेवर सॉफ्टवेयर डेवलपर्स द्वारा प्रतिस्पर्धी प्रोग्रामिंग की भी आलोचना की गई है। एक महत्वपूर्ण बिंदु यह है कि कई तेज़-तर्रार प्रोग्रामिंग प्रतियोगिताएँ प्रतियोगियों को खराब प्रोग्रामिंग आदतें और कोड शैली सिखाती हैं (जैसे मैक्रो (कंप्यूटर विज्ञान) का अनावश्यक उपयोग, OOP अमूर्तता और टिप्पणियों की कमी, छोटे चर नामों का उपयोग, आदि)। इसके अलावा, अपेक्षाकृत कम समाधान के साथ केवल छोटी एल्गोरिथम पहेलियाँ पेश करके, ICPC और IOI जैसी प्रोग्रामिंग प्रतियोगिताएं आवश्यक रूप से अच्छे सॉफ़्टवेयर इंजीनियरिंग कौशल और अभ्यास नहीं सिखाती हैं, क्योंकि वास्तविक सॉफ़्टवेयर परियोजनाओं में आमतौर पर कोड की हजारों स्रोत पंक्तियाँ होती हैं और बड़ी टीमों द्वारा विकसित की जाती हैं। लंबे समय तक। पीटर नॉरविग ने कहा कि उपलब्ध आंकड़ों के आधार पर, प्रोग्रामिंग प्रतियोगिताओं का विजेता होने के नाते Google में उनके काम पर प्रोग्रामर के प्रदर्शन के साथ नकारात्मक रूप से सहसंबद्ध होता है (भले ही प्रतियोगिता विजेताओं को काम पर रखने की संभावना अधिक थी)। नॉरविग ने बाद में कहा कि यह सहसंबंध एक छोटे डेटा सेट पर देखा गया था, लेकिन बड़े डेटा सेट की जांच के बाद इसकी पुष्टि नहीं की जा सकी

फिर भी एक और भावना यह है कि ज्ञात समाधानों के साथ समस्याओं को हल करके अत्यधिक प्रतिस्पर्धा पर अपना समय बर्बाद करने के बजाय, हाई-प्रोफाइल प्रोग्रामरों को अपना समय वास्तविक दुनिया की समस्याओं को हल करने में लगाना चाहिए।

साहित्य

 * हलीम, एस., हलीम, एफ. (2013)। प्रतिस्पर्धी प्रोग्रामिंग 3: प्रोग्रामिंग प्रतियोगिताओं की नई निचली सीमा। लुलु।
 * लक्सोनेन, ए। (2017)। प्रतियोगी प्रोग्रामिंग के लिए गाइड (कंप्यूटर विज्ञान में स्नातक विषय)। चाम: स्प्रिंगर इंटरनेशनल पब्लिशिंग।
 * कोस्तका, बी. (2021). अभ्यास में खेल प्रोग्रामिंग। व्रोकला विश्वविद्यालय।

यह भी देखें

 * :श्रेणी:कंप्यूटर विज्ञान प्रतियोगिताएं
 * कोड गोल्फ
 * आयोजित हैकथॉन

बाहरी संबंध

 * Open-source project for running contests
 * Contest Management System Open-source tool in Python to run and manage a programming contest on a server IOI 2012 and IOI 2013.