कोड गोल्फ

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

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