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

From Vigyanwiki
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) स्ट्रोक की संख्या को कम करने का प्रयास कर रहे हैं।


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


पाई के 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>
Line 19: Line 19:
`1000<~\;
`1000<~\;
</syntaxhighlight>
</syntaxhighlight>
यह 3141592653 से शुरू होने वाली एक स्ट्रिंग को प्रिंट करता है जिसके बाद पाई के 990 और अंक होते हैं।
यह "3141592653" से शुरू होने वाली एक स्ट्रिंग को प्रिंट करता है जिसके बाद पाई के 990 और अंक प्रिंट होते हैं।


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


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


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


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


== संदर्भ ==
== संदर्भ ==
{{reflist}}
{{reflist}}


 
बाहरी संबंध
== बाहरी संबंध ==
*[http://codegolf.stackexchange.com CodeGolf.StackExchange.com: Questions and answers on programming puzzles and code golf]
*[http://codegolf.stackexchange.com CodeGolf.StackExchange.com: Questions and answers on programming puzzles and code golf]
*[https://esolangs.org/wiki/Category:Golfing_language List of dedicated golfing languages]
*[https://esolangs.org/wiki/Category:Golfing_language List of dedicated golfing languages]

Revision as of 17:03, 12 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.

बाहरी संबंध