अजगर: काश मैं PHP [बंद] था


8

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

इसी तरह, आपका कार्य एक प्रोग्राम लिखना है जो उस भाषा से कभी संतुष्ट नहीं होता है जो आपके प्रोग्राम को एक अलग भाषा में बदलने के लिए रेगेक्स रिप्लेसमेंट के सेट का उत्पादन करना चाहिए। और इसी तरह।

नियम

  1. अपनी पसंद की भाषा में एक कार्यक्रम लिखें।
  2. कार्यक्रम को कम से कम दो खंडों की एक श्रृंखला का उत्पादन करना चाहिए। एक खंड पाठ का एक गुच्छा है, जिसे अर्धविराम द्वारा अलग किया गया है। हालाँकि, यदि कोई अर्धविराम रेगेक्स के भीतर समाहित है, जैसे कि इसे वहाँ तोड़ने से अमान्य सिंटैक्स हो जाएगा, तो यह अलग सेगमेंट नहीं करता है। उदाहरण देखें।
  3. पहला खंड खोजने के लिए एक रेगेक्स पैटर्न है, और दूसरा खंड प्रतिस्थापन पैटर्न है। तीसरा एक और "खोज" पैटर्न है, और चौथा एक "प्रतिस्थापित" पैटर्न है, और इसी तरह।
  4. कार्यक्रम में रेगेक्स पैटर्न लागू करें। पहले खंड पर पैटर्न को दूसरे पर एक के साथ बदलें; तीसरे पैटर्न को चौथे पर एक के साथ बदलें, और इसी तरह।
  5. परिणाम एक अलग भाषा में एक कार्यक्रम होना चाहिए, जो स्वयं, नियम 2 से 4 का पालन करता है।
  6. उपयोग की जाने वाली भाषाओं में एक अनंत, दोहराव चक्र होता है।
    • उदाहरण के लिए, Python -> PHP -> C ++ -> Python -> PHP -> C ++ -> Python - ... ...
  7. आपका स्कोर चक्र की अवधि है। सबसे छोटी प्रारंभिक कोड लंबाई से संबंध टूट जाते हैं।
    • उपरोक्त उदाहरण में, स्कोर तीन है।
  8. चक्र के प्रत्येक पुनरावृत्ति में, किसी भी भाषा का एक से अधिक बार उपयोग नहीं किया जा सकता है।
  9. नियम 5 और 7 के लिए, संगत भाषाओं (C और C ++) और एक ही भाषा (Python 2 और Python 3) के विभिन्न संस्करणों को एक ही माना जाता है।
  10. स्वयं कार्यक्रमों को दोहराने की आवश्यकता नहीं है।
    • उपरोक्त उदाहरण में, पहला और चौथा कार्यक्रम भिन्न हो सकते हैं।
  11. रेगेक्स का कोई भी संस्करण स्वीकार्य है, लेकिन सभी कार्यक्रमों के लिए इसका उपयोग किया जाना चाहिए।
  12. प्रत्येक प्रोग्राम के लिए कुल आउटपुट 100 वर्णों से अधिक नहीं हो सकता है।
  13. प्रत्येक आउटपुट में वास्तव में प्रोग्राम को बदलने के लिए निर्देश होने चाहिए। यही है, चक्र में लगातार दो कार्यक्रम समान नहीं हो सकते हैं।

उदाहरण

अजगर -> रूबी -> अजगर -> ...

print "uts;Z;rint;uts;Z(?=;Z);rint"

आउटपुट:

uts;Z;rint;uts;Z(?=;Z);rint

खंड हैं:

FIND     ;    REPLACE
uts      ;    Z
rint     ;    uts
Z(?=;Z   ;    rint   (breaking the first segment in two would result in invalid syntax)

क्रम में रेगेक्स प्रतिस्थापन को लागू करना, हमें देता है:

print "Z;Z;rint;Z;Z(?=;Z);rint"      # replace each "uts" with "Z"
puts "Z;Z;uts;Z;Z(?=;Z);uts"         # replace each "rint" with "uts"
puts "rint;Z;uts;rint;Z(?=;Z);uts"   # replace each "Z" followed by ";Z" with "rint"

अंतिम पंक्ति को चलाने से हमें इसे वापस पायथन कोड में बदलने के निर्देश मिलते हैं।


यदि आप टाई ब्रेकर के रूप में कोड आकार का उपयोग कर रहे हैं, तो क्या हमें वास्तव में 100 वर्ण सीमा की आवश्यकता है?
मार्टिन एंडर

@ मार्टिनबटनर हाँ; क्यों नहीं?
यपनिप

यकीन है, लेकिन यह एक चरित्र की तुलना में लंबा है \;;)
मार्टिन एंडर

सी ++ सी के साथ अनिवार्य रूप से संगत नहीं है
golfer9338

8
मुझे लगता है कि आप शायद यह चाहते हैं कि चक्र के सभी कार्यक्रम अलग-अलग हों। यदि मैं गलत हूं, तो कृपया बताएं - और मैं स्पष्ट समाधान पर प्राथमिकता का दावा करता हूं।
पीटर टेलर

जवाबों:


6

2 भाषाएँ: अजगर, रूबी; 33 29 बाइट्स

यहाँ पायथन और रूबी करने का एक और तरीका है, जो कि चुनौती से थोड़ा छोटा है:

Python:   print'^;puts"^.*?\\42#\\73"#'
prints:   ^;puts"^.*?\42#\73"#

Ruby:     puts"^.*?\42#\73"#print'^;puts"^.*?\\42#\\73"#'
prints:   ^.*?"#;

PHP को मिश्रण में जोड़ना बहुत मुश्किल नहीं होना चाहिए ।


1

2 भाषाएँ: पायथन 2 और बेफ़ुंज -93, 77 बाइट्स

इस बार नियमों को ध्यान से पढ़ने के बाद , मैं एक वास्तविक उत्तर के साथ आया। यह कोई पुरस्कार नहीं जीतेगा, लेकिन Befunge को प्रोग्राम करने में बहुत मज़ा आता है।

u=u">>>>>:#,_@;Z;print;>>>>>:#,_@;Z(?=;Z);print;<v;Y;u;<v;Y(?=;Y);u"
print u

यह पायथन प्रोग्राम आउटपुट:

>>>>>:#,_@;Z;print;>>>>>:#,_@;Z(?=;Z);print;<v;Y;u;<v;Y(?=;Y);u

इन प्रतिस्थापनों से कौन सी उपज मिलती है:

FIND         REPLACE
>>>>>:#,_@   Z
print        >>>>>:#,_@
Z(?=;Z)      print
<v           Y
u            <v
Y(?=;Y)      u

जो कार्यक्रम को इस Befunge प्रोग्राम में बदल देता है:

<v=<v"print;Z;>>>>>:#,_@;print;Z(?=;Z);>>>>>:#,_@;u;Y;<v;u;Y(?=;Y);<v"
>>>>>:#,_@ <v

शायद मैं देख सकता हूँ कि क्या मैं इसे एक पंक्ति बना सकता हूँ। सच कहूँ तो, मैं थोड़ा हैरान हूँ Befunge इस तरह की समस्या के लिए बिल्कुल काम करता है।

(एक गुच्छा को हटाने और हटाने के लिए खेद है; मैं एक सेकंड के लिए घबरा रहा था क्योंकि मुझे लगा कि शायद कार्यक्रम ने काम नहीं किया है।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.