mbomb007 ने हमें एक स्वयं परिवर्तन कार्यक्रम बनाने के लिए कहा । इसकी एक दिलचस्प चुनौती है, लेकिन मैं व्यक्तिगत रूप से अपने कार्यक्रमों को आत्म-उत्परिवर्तित करने के लिए प्रोत्साहित करना पसंद नहीं करता। मुझे यह सोचना पसंद है कि, हर कार्यक्रम के दिल में एक खूबसूरत तितली है जो बाहर तोड़ने के लिए इंतजार कर रही है।
जैसे, मेरी पहली बार कोड गोल्फ चुनौती के लिए, मैं एक तितली को स्टैक एक्सचेंज को चुनौती देता हूं। आपके प्रोग्राम को अपने कोड को इनपुट और आउटपुट के रूप में स्वीकार करना चाहिए, उसके I am a caterpillar!
बाद कोड उसी भाषा में किसी अन्य प्रोग्राम के लिए होगा (आप आउटपुट के बीच कोई डिवाइडर लगा सकते हैं या नहीं ... लेकिन हम तितलियों की बात कर रहे हैं, इसलिए प्रिटीनेस मायने रखता है!)। यह दूसरा कार्यक्रम आउटपुट होना चाहिएI am a beautiful butterfly!
कायापलट: इस कार्यक्रम को खुद को संशोधित करना चाहिए, यही कारण है कि इसे स्वयं इनपुट के रूप में पारित किया जा रहा है। मैं एक उबाऊ नेस्टेड प्रोग्राम नहीं चाहता, जो कि एक प्रिंट स्टेटमेंट हो, जो प्रिंट I am a caterpillar!
सोर्स कोड के बाद हो। आपको स्वयं कोड को मेटामॉर्फ करना होगा, इसलिए सबसे उबाऊ स्वीकार्य उत्तर वह है जो प्रिंट करता है I am a caterpillar
, फिर इनपुट से एक स्ट्रिंग निकलता है (जो कोड होता है) और प्रिंट करता है। बेशक, यह लिखने के लिए बहुत मुश्किल आवश्यकता है, इसलिए इसे "चुनौती की भावना" के रूप में सोचा जाना चाहिए। औपचारिक आवश्यकता "आपके कार्यक्रम के रूप में यदि आपके प्रोग्राम को उसी लंबाई की एक यादृच्छिक स्ट्रिंग दी जाती है, I am a butterfly
तो दूसरे प्रोग्राम को चलाने पर मुद्रण की 5% से कम संभावना होनी चाहिए ।"
सारांश:
- एक प्रोग्राम लिखें, जो इनपुट के रूप में अपना कोड प्रदान करते समय प्रिंट करता है,
I am a caterpillar!
जिसके बाद स्रोत कोड का एक ब्लॉक होता है (उनके या नहीं के बीच एक सीमांकक के साथ)। - स्रोत कोड का यह दूसरा ब्लॉक, जब उसी भाषा के रूप में संकलित / व्याख्या की जाती है, प्रिंट करता है
I am a beautiful butterfly!
- यदि आपके प्रोग्राम को इनपुट के रूप में अपना स्वयं का सोर्स कोड नहीं दिया गया है, और इसके बजाय वर्णों का एक यादृच्छिक स्ट्रिंग दिया गया है जो अपने स्वयं के कोड से मेल नहीं खाता है, तो परिणाम को
I am a butterfly!
कम से कम 95% यादृच्छिक के लिए संकलन / व्याख्या करने में विफल होना चाहिए, या प्रिंट नहीं करना चाहिए। तार (आत्मा: आपको इनपुट से अपने स्वयं के स्रोत कोड को पढ़ने की उम्मीद है, और इसे एक तितली में एक साथ सिलाई करें)।- मैं आपको यह साबित करने में सहज नहीं हूं, इसलिए जब तक आप कायापलट विचार की भावना को पकड़ रहे हैं, अपने स्वयं के कोड को संशोधित कर रहे हैं, लेकिन यदि आप अपने इनपुट का उपयोग करके काम करने के लिए लूपोल गेम खेलने की कोशिश कर रहे हैं, तो उम्मीद करें सिद्ध करने के लिए।
- मानक खामियां लागू होती हैं
मैं चाहता हूँ कि उनकी सुंदरता का अंदाज़ा लगाया जाए, लेकिन यह एक निश्चित रूप से गैर-मात्रात्मक दृष्टिकोण है, इसलिए सामान्य "बाइट्स" मार्ग का उपयोग न्याय करने के लिए किया जा सकता है
बोनस : -20% - किसी भी 3 अक्षर स्ट्रिंग को चुनें जो आपके कार्यक्रम के पहले 3 अक्षरों से मेल नहीं खाती है। यदि मैं कैटरपिलर प्रोग्राम चलाता हूं, लेकिन इनपुट को संशोधित करता हूं ताकि पहले 3 चरित्र निर्दिष्ट लोगों में बदल जाएं, I am Batman!
इसके बजाय प्रिंट करें । हमेशा बैटमैन बनो। ( एक ही यादृच्छिक स्ट्रिंग नियम इसके लिए लागू होते हैं ... कायापलट! )
तुच्छ उदाहरण (अजगर):
"""
print "I am a beautiful butterfly!"
#print "I am Batman!"
"""
import sys
code = sys.stdin.read()
if code.startswith("YYZ"):
# swap the comments between the print statements
code = code.replace("#print", "_a").replace("print", "#print").replace("_a", "print")
code = [3:] # remove """ or XYZ
code = code.split('"""')[0]
print "I am a caterpillar!"
print code