उत्परिवर्तन-कठोर क्वीन


15

आपका कार्य एक ऐसा कार्यक्रम बनाना है जो अपने स्वयं के स्रोत को प्रिंट करता है।

"अरे, हमारे पास पहले से ही यह चुनौती है, और इसके विविध प्रकार के टन! आप एक और क्यों बना रहे हैं?" आप पूछ सकते हैं, लेकिन यह सबसे कठिन लोगों में से एक होने जा रहा है (उम्मीद है, वैसे भी)।

आपका क्वीन "म्यूटेशन-हार्ड" होना चाहिए, जिसका अर्थ है कि क्वीन, यहां तक ​​कि जब इसके पात्रों में से किसी एक को जगह में डुप्लिकेट किया जाता है, तो मूल प्रोग्राम के स्रोत कोड को आउटपुट करना होगा।

उदाहरण के लिए, यदि आपके पास एक क्वीन है (निम्नलिखित उदाहरण किसी भी भाषा में नहीं लिखा गया है, तो यह सिर्फ छद्म कोड है):

abcd

ये प्रोग्राम सभी आउटपुट होना चाहिए abcd:

aabcd
abbcd
abccd
abcdd

(उन कार्यक्रमों में से प्रत्येक में, a, b, cऔर dप्रत्येक में जगह दोहराया गया है, जिसका अर्थ है डुप्लिकेट चरित्र मूल चरित्र के बाद सीधे रखा गया था।)

नियम:

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

यह , इसलिए बाइट्स जीत में सबसे छोटा कोड है!


क्या यह गिनती है? 0और 00CJam दोनों आउटपुट में 0
जियोकॉवेल

नहीं, 0एक उचित रानी नहीं है।
डेनिस

2
मुझे लगता है कि यह कोड-गेंदबाजी के
श्री एक्सकोडर

क्या कोड उत्परिवर्तन की समस्या सामान्य रूप से हल है? जब तक एक उद्धृत स्ट्रिंग के अंदर एक चरित्र के लिए उत्परिवर्तन नहीं होता है, यह आमतौर पर कार्यक्रम को भ्रष्ट करेगा।
hasen

शीर्षक थोड़ा भ्रामक नहीं है? "म्यूटेशन" एक चरित्र को बदलने का सुझाव देता है, इसे दोहराते हुए नहीं
लुइस मेंडो

जवाबों:


18

> <> , 56 बाइट्स

^
.
+
8
f
0
o
a
o
~
:
?
~
:
?
:
-
*
4
8
:
^
^
}
*
3
d
'

इसे ऑनलाइन आज़माएं! या सभी उत्परिवर्तन सत्यापित करें

मूल कार्यक्रम कैसे काम करता है (पुराना)

इंटरप्रेटर सेल (0, 0) में शुरू होता है । ऊपर की ओर^ दिशा सेट करता है , इसलिए निर्देश सूचक (आईपी) सेल (0, 20) के चारों ओर घूमता है ।

'स्ट्रिंग मोड को सक्रिय करता है: जब तक अगला 'सामने नहीं आता, तब तक आईपी ​​के तहत सभी वर्ण स्टैक पर धकेल दिए जाते हैं। वही 'फिर से लपेटने के बाद पाया जाता है, इसलिए हम धक्का देते हैं

d3*}^^:84*=?~oao0f.^

IP भूमि (0, 19) , अभी भी ऊपर की ओर जा रही है। निष्पादन 13 = 0xd कोd3*} धक्का देता है , फिर 3 , दोनों मूल्यों ( 39 / एकल उद्धरण ) को गुणा करता है , फिर स्टैक को दाईं ओर घुमाता है। यह स्टैक को निम्नानुसार छोड़ देता है।

'd3*}^^:84*=?~oao0f.^

अगले दो निर्देश ( ^) इस बिंदु पर कुछ नहीं करते हैं।

:84*=स्टैक के शीर्ष को डुप्लिकेट करता है, 8 और 4 को धक्का देता है , उन्हें ( 32 / स्थान ) गुणा करता है , फिर अंतरिक्ष के साथ समानता के लिए डुप्लिकेट किए गए चरित्र का परीक्षण करता है । अनछुए कार्यक्रम के लिए, यह हमेशा 0 को धक्का देगा ।

?अगले अनुदेश को छोड़ देता है यदि स्टैक के ऊपर झूठा है। मूल कार्यक्रम के लिए, यह हमेशा होता है, इसलिए ~हमेशा छोड़ दिया जाता है।

oaoपॉप और स्टैक के शीर्ष को प्रिंट करता है, 10 / लाइनफीड को धक्का देता है , फिर पॉप और प्रिंट को फीड करता है

अंत 0f.में सेल (0, 15) (बॉटलमोस्ट ^) पर कूदता है , स्टैक पर अगले चरित्र के साथ शुरू होता है।

स्टैक खाली होने के बाद, पूरे स्रोत कोड को प्रिंट किया गया है। :विफल हो जाएगा और कार्यक्रम से बाहर निकलता है।

कैसे उत्परिवर्तित कार्यक्रम काम करते हैं (पुराना)

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

सबसे पहले किसी भी लाइनफीड ^को डुप्लिकेट करने से सेल (0, 14) और (0, 15) से (0, 15) और (0, 16) में बदलाव होगा । 0f.अब बॉटलमोस्ट से पहले सेल में कूद जाएगा ^, जो कि एक भी है ^, इसलिए प्रोग्राम शिफ्ट से प्रभावित नहीं होता है।

अंत में, किसी भी डुप्लिकेट किए गए लाइनफीड चरित्र को भी स्ट्रिंग बदल देगा। छोटी लाइनें रिक्त स्थान के साथ गद्देदार होती हैं, इसलिए लाइनफ़ीड की स्थिति में एक 32 / स्थान डाला जाएगा। अंतरिक्ष के लिए 184*= धक्का देगा , इसलिए अगले अनुदेश को छोड़ें नहीं। इस स्थिति में, चबूतरे और डिस्क स्थान को खाली करते हैं , इसलिए निम्नलिखित इसके बजाय चरित्र को अंतरिक्ष के ऊपर प्रिंट करेगा ।?~o


आप किसी भी न्यूलाइन को डुप्लिकेट कर सकते हैं और यह अभी भी काम करेगा।
डेनिस

3
ओह, मैं पोस्ट ठीक से पढ़ नहीं किया: पी (Dammit डेनिस, तुम क्यों कर रहे हैं तो अच्छा)
clismique


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