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

From Vigyanwiki
No edit summary
Line 6: Line 6:


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


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

Revision as of 16:53, 12 August 2023

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

व्युत्पत्ति

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

इतिहास

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

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

समर्पित गोल्फिंग भाषाएँ

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

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

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

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

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

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

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


बाहरी संबंध