कोड गोल्फ

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

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

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

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

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

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

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

कोड गोल्फ के प्रकार
कुछ कोड गोल्फ प्रश्न, जैसे कि सामान्य प्रोग्रामिंग साइटों पर पूछे गए प्रश्नों के लिए, किसी विशिष्ट प्रोग्रामिंग लैंग्वेज में कार्यान्वयन की आवश्यकता नहीं हो सकती है। हालाँकि, यह उन समस्याओं की शैली को सीमित करता है जो समस्या डिजाइनरों के लिए संभव है (उदाहरण के लिए, कुछ लैंग्वेज सुविधाओं के उपयोग को सीमित करके)। इसके अतिरिक्त, ऐसे "ओपन" प्रश्नों के निर्माण के परिणामस्वरूप कोड गोल्फ विशिष्ट प्रोग्रामिंग लैंग्वेज बोलियों जैसे आरईबीएमयू (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