कोड गोल्फ

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

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

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

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

पाई के 1000 अंक प्रिंट करने के लिए गोल्फस्क्रिप्ट कोड का एक उदाहरण: यह 3141592653 से शुरू होने वाली एक स्ट्रिंग को प्रिंट करता है जिसके बाद पाई के 990 और अंक होते हैं।

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

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

यह भी देखें

 * कोड कविता
 * आधार - सामग्री संकोचन
 * न्यूनीकरण (प्रोग्रामिंग)
 * पर्ल#पर्ल मनोरंजन
 * कोलमोगोरोव जटिलता
 * काता (प्रोग्रामिंग)

बाहरी संबंध

 * CodeGolf.StackExchange.com: Questions and answers on programming puzzles and code golf
 * List of dedicated golfing languages
 * regular expression golfing: a fun variant to code golf
 * ShortestWikiContest
 * Reverse Code Golf (xkcd)
 * Code Golf