कोड गोल्फ: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{short description|Recreational computer programming competition}}
{{short description|Recreational computer programming competition}}
'''कोड गोल्फ''' एक प्रकार का मनोरंजनात्मक [[कंप्यूटर प्रोग्रामिंग]] [[प्रतियोगिता]] है, जिसमें प्रतिभागियों का लक्ष्य किसी विशिष्ट समस्या का सबसे छोटे संभावित सोर्स कोड को प्राप्त करना होता है।<ref>Code Golf Stack Exchange. [https://codegolf.stackexchange.com/tags/code-golf/info About code-golf]. Retrieved 2021-12-21.</ref><ref>{{Cite web|url=https://assist-software.net/blog/introduction-code-golf|title=Introduction to Code-golf {{!}} ASSIST Software Romania|access-date=2023-03-23}}</ref> कोड गोल्फ चुनौतियाँ और प्रतियोगिताएँ भी प्रोग्रामिंग लैंग्वेज के उपयोग के साथ-साथ नामित की जा सकती हैं (उदाहरण के लिए, [[पर्ल|''पर्ल'']] गोल्फ)।
'''कोड गोल्फ''' एक प्रकार का मनोरंजनात्मक [[कंप्यूटर प्रोग्रामिंग]] [[प्रतियोगिता]] है, जिसमें प्रतिभागियों का लक्ष्य किसी विशिष्ट समस्या का सबसे छोटे संभावित सोर्स कोड को प्राप्त करना होता है।<ref>Code Golf Stack Exchange. [https://codegolf.stackexchange.com/tags/code-golf/info About code-golf]. Retrieved 2021-12-21.</ref><ref>{{Cite web|url=https://assist-software.net/blog/introduction-code-golf|title=Introduction to Code-golf {{!}} ASSIST Software Romania|access-date=2023-03-23}}</ref> कोड गोल्फ चुनौतियाँ और प्रतियोगिताएँ भी प्रोग्रामिंग लैंग्वेज के नाम भी दिया जा सकता है और उपयोग भी किया जा सकता है (उदाहरण के लिए, [[पर्ल|''पर्ल'']] ''गोल्फ'')।


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


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


जबकि "कोड गोल्फ" शब्द का प्रयोग स्पष्टतः पहली बार 1999 में पर्ल के साथ किया गया था,<ref name='perl-golf-coined'>{{cite newsgroup | author = Greg Bacon | title = Re: Incrementing a value in a slice |message-id= 7imnti$mjh$1@info2.uah.edu | newsgroup = comp.lang.perl.misc | date = 1999-05-28 | url = https://groups.google.com/group/comp.lang.perl.misc/msg/7b97c434492c8d20 | accessdate = 2011-07-12}}</ref> और बाद में [[आरएसए (एल्गोरिदम)|आरएसए]] एन्क्रिप्शन करने वाले प्रोग्राम को लिखने के लिए पर्ल के उपयोग के माध्यम से लोकप्रिय हुआ,<ref name='rsa'>
जबकि "कोड गोल्फ" शब्द का प्रयोग स्पष्टतः पहली बार 1999 में पर्ल के साथ किया गया था,<ref name='perl-golf-coined'>{{cite newsgroup | author = Greg Bacon | title = Re: Incrementing a value in a slice |message-id= 7imnti$mjh$1@info2.uah.edu | newsgroup = comp.lang.perl.misc | date = 1999-05-28 | url = https://groups.google.com/group/comp.lang.perl.misc/msg/7b97c434492c8d20 | accessdate = 2011-07-12}}</ref> और बाद में [[आरएसए (एल्गोरिदम)|आरएसए]] एन्क्रिप्शन करने वाले प्रोग्राम को लिखने के लिए पर्ल के उपयोग के माध्यम से लोकप्रिय हुआ,<ref name='rsa'>
{{cite web | url = http://www.cypherspace.org/rsa/pureperl.html | title = RSA in 5 lines of perl | accessdate = 2011-01-10 | last = Back | first = Adam}}</ref> ऐसा माना जाता है कि इसी तरह की एक अनौपचारिक प्रतियोगिता पहले [[एपीएल (प्रोग्रामिंग भाषा)|एपीएल]] हैकर्स के बीच लोकप्रिय थी। प्रोग्राम के आकार के लिए आक्रामक रूप से अनुकूलन की चुनौतीपूर्ण प्रकृति को लंबे समय से मान्यता दी गई है; उदाहरण के लिए, रेग्नेसेंट्रलेन के जीआईईआर कंप्यूटर के लिए 1962 के कोडिंग मैनुअल में लिखा है कि "यह कम से कम संभव संख्या में निर्देशों के साथ कोड करने के लिए एक समय लेने वाला खेल है" और व्यावहारिक प्रोग्रामिंग के लिए इसके विरुद्ध अनुशंसा करता है।<ref name="GIER">{{cite book |last=Andersen |first1=Christian |last2=Gram |first2=Christian |url=http://datamuseum.dk/w/images/b/be/LaerebogI.pdf |format=PDF |title=Lærebog i Kodning for GIER |volume=1 |edition=3 |location=Copenhagen |publisher=Regnecentralen |year=1962 |page=104 |accessdate=2020-05-16 }}</ref> आज यह शब्द विभिन्न प्रकार की लैंग्वेज को कवर करने के लिए विकसित हो गया है, जिसने समर्पित गोल्फ़िंग लैंग्वेज के निर्माण को भी गति दी है।
{{cite web | url = http://www.cypherspace.org/rsa/pureperl.html | title = RSA in 5 lines of perl | accessdate = 2011-01-10 | last = Back | first = Adam}}</ref> ऐसा माना जाता है कि इसी तरह की एक अनौपचारिक प्रतियोगिता पहले [[एपीएल (प्रोग्रामिंग भाषा)|एपीएल]] हैकर्स के बीच लोकप्रिय थी। प्रोग्राम के आकार के लिए आक्रामक रूप से अनुकूलन की चुनौतीपूर्ण प्रकृति को लंबे समय से मान्यता दी गई है; उदाहरण के लिए, रेग्नेसेंट्रलेन के जीआईईआर कंप्यूटर के लिए 1962 के कोडिंग मैनुअल में लिखा है कि "यह कम से कम संभव संख्या में निर्देशों के साथ कोड करने के लिए एक समय लेने वाला खेल है" और व्यावहारिक प्रोग्रामिंग के लिए इसके विरुद्ध अनुशंसा करता है।<ref name="GIER">{{cite book |last=Andersen |first1=Christian |last2=Gram |first2=Christian |url=http://datamuseum.dk/w/images/b/be/LaerebogI.pdf |format=PDF |title=Lærebog i Kodning for GIER |volume=1 |edition=3 |location=Copenhagen |publisher=Regnecentralen |year=1962 |page=104 |accessdate=2020-05-16 }}</ref> आज यह शब्द विभिन्न प्रकार की लैंग्वेज को कवर करने के लिए विकसित हो गया है, जिसने समर्पित गोल्फ़िंग लैंग्वेज के निर्माण को भी गति दी है।
== समर्पित गोल्फिंग लैंग्वेज ==
== समर्पित गोल्फिंग लैंग्वेज ==
विशेष रूप से कोड गोल्फ़िंग को ध्यान में रखकर कई नई लैंग्वेज बनाई गई हैं। उदाहरणों में GolfScript, Flogscript और Vyxal सम्मिलित हैं, जो ट्यूरिंग-पूर्ण लैंग्वेज हैं जो कोड में विचारों को संक्षेप में व्यक्त करने के लिए संरचनाएं प्रदान करती हैं। चूँकि गोल्फ़िंग लैंग्वेज अत्यधिक संक्षिप्तता के लिए प्रतिस्पर्धा करती हैं, इसलिए उनका डिज़ाइन पठनीयता का त्याग करता है, जो व्यावहारिक उत्पादन वातावरण के लिए महत्वपूर्ण है, और इसलिए वे प्रायः गोपनीय होते हैं। कभी-कभी, हालाँकि, एक लैंग्वेज व्यावहारिक उद्देश्य के लिए डिज़ाइन की जाती है, लेकिन कोड गोल्फ के लिए उपयुक्त प्रमाणित होती है।
कई नई लैंग्वेज विशेष रूप से कोड गोल्फिंग के लिए बनाई गई हैं। उदाहरणों में गोल्फस्क्रिप्ट (GolfScript), फ्लॉगस्क्रिप्ट (FlogScript) और वायक्सल (Vyxal) सम्मिलित हैं, जो ट्यूरिंग-पूर्ण लैंग्वेज हैं जो संक्षिप्त रूप में कोड में विचारों को व्यक्त करने के लिए निर्माण करती हैं। क्योंकि गोल्फिंग लैंग्वेज अत्यधिक संक्षिप्तता के लिए प्रतिस्पर्धा करती हैं, उनका डिज़ाइन पढ़ने की समझ का त्याग करता है, जो प्रैक्टिकल प्रोडक्शन एनवायरनमेंट के लिए महत्वपूर्ण होता है, और इसलिए वे प्रायः एसोटेरिक होती हैं। कभी-कभी, हालांकि, एक लैंग्वेज एक व्यावसायिक उद्देश्य के लिए डिज़ाइन की जाती है, लेकिन कोड गोल्फ के लिए उपयुक्त प्रमाणित होती है।


पाई के 1000 अंक प्रिंट करने के लिए गोल्फस्क्रिप्ट कोड का एक उदाहरण:<ref>{{Cite web|url=http://www.golfscript.com/golfscript/examples.html|title=गोल्फस्क्रिप्ट उदाहरण|access-date=2023-03-23}}</ref>
पाई के 1000 अंक प्रिंट करने के लिए गोल्फस्क्रिप्ट कोड का एक उदाहरण:<ref>{{Cite web|url=http://www.golfscript.com/golfscript/examples.html|title=गोल्फस्क्रिप्ट उदाहरण|access-date=2023-03-23}}</ref><syntaxhighlight lang="text">
<syntaxhighlight lang="text">
;''
;''
6666,-2%{2+.2/@*\/10.3??2*+}*
6666,-2%{2+.2/@*\/10.3??2*+}*
Line 21: Line 20:
यह "3141592653" से प्रारम्भ होने वाली एक स्ट्रिंग को प्रिंट करता है जिसके बाद पाई के 990 और अंक प्रिंट होते हैं।
यह "3141592653" से प्रारम्भ होने वाली एक स्ट्रिंग को प्रिंट करता है जिसके बाद पाई के 990 और अंक प्रिंट होते हैं।


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


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


== यह भी देखें ==
== यह भी देखें ==

Revision as of 14:24, 15 August 2023

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

व्युत्पत्ति

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

इतिहास

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

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

समर्पित गोल्फिंग लैंग्वेज

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

पाई के 1000 अंक प्रिंट करने के लिए गोल्फस्क्रिप्ट कोड का एक उदाहरण:[6]

;''
6666,-2%{2+.2/@*\/10.3??2*+}*
`1000<~\;

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

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

कोड गोल्फ के प्रकार

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

यह भी देखें

  • कोड पोएट्री
  • डेटा कम्प्रेशन
  • मिनिफिकेशन (प्रोग्रामिंग)
  • पर्ल पासटाइम्स
  • कोलमोगोरोव कम्प्लेक्सिटी
  • काटा (प्रोग्रामिंग)

संदर्भ

  1. Code Golf Stack Exchange. About code-golf. Retrieved 2021-12-21.
  2. "Introduction to Code-golf | ASSIST Software Romania". Retrieved 2023-03-23.
  3. Greg Bacon (1999-05-28). "Re: Incrementing a value in a slice". Newsgroupcomp.lang.perl.misc. Usenet: 7imnti$mjh$1@info2.uah.edu. Retrieved 2011-07-12.
  4. Back, Adam. "RSA in 5 lines of perl". Retrieved 2011-01-10.
  5. Andersen, Christian; Gram, Christian (1962). Lærebog i Kodning for GIER (PDF). Vol. 1 (3 ed.). Copenhagen: Regnecentralen. p. 104. Retrieved 2020-05-16.
  6. "गोल्फस्क्रिप्ट उदाहरण". Retrieved 2023-03-23.

बाहरी संबंध