तीन आपसी झगड़े


23

काम

इस चुनौती में, आपका काम तीन कार्यक्रमों को लिखना है जो एक तरह की आपसी क्वीन जैसी प्रणाली बनाते हैं। चलो कार्यक्रमों को बुलाते हैं A, Bऔर C। यदि किसी एक प्रोग्राम को इनपुट के रूप में दूसरे प्रोग्राम का स्रोत दिया जाता है, तो वह तीसरे प्रोग्राम के स्रोत को आउटपुट करेगा। उदाहरण के लिए, यदि इनपुट के रूप Aमें दिया Bजाता है, तो यह आउटपुट करता है C। कार्यक्रमों इनपुट के रूप में अपने स्वयं के स्रोत दिया जाता है, तो वे करेगा उत्पादन तीन तार "three", "mutual"और "quines"(उद्धरण के बिना)। सभी मामलों में, वे एक अतिरिक्त अनुगामी नईलाइन का उत्पादन कर सकते हैं। किसी भी अन्य जानकारी के लिए, प्रोग्राम क्रैश सहित कुछ भी कर सकते हैं।

उदाहरण

उदाहरण के लिए, मान लीजिए कि स्रोत कोड A, Bऔर Cहैं aSdf, ghJkऔर zxcV। फिर कार्यक्रमों को निम्नानुसार व्यवहार करना चाहिए।

Source Input  Output
--------------------
aSdf   aSdf   three
aSdf   ghJk   zxcV
aSdf   zxcV   ghJk
ghJk   aSdf   zxcV
ghJk   ghJk   mutual
ghJk   zxcV   aSdf
zxcV   aSdf   ghJk
zxcV   ghJk   aSdf
zxcV   zxcV   quines

नियम और स्कोरिंग

समाधान A, Bऔर Cया तो फ़ंक्शन या पूर्ण कार्यक्रम हो सकते हैं, लेकिन उन्हें पूरी तरह से स्वतंत्र होना चाहिए: कोई साझा कोड की अनुमति नहीं है। मानक खामियों और क्वीन नियम लागू होते हैं, इसलिए कार्यक्रम किसी भी तरह से अपने स्वयं के स्रोत कोड तक नहीं पहुंच सकते हैं।

आपका स्कोर संयुक्त बाइट की गिनती है A, Bऔर C, कम स्कोर बेहतर है।


क्या वास्तव में इसका मतलब है "कोई साझा कोड की अनुमति नहीं है"? क्या उनके समान भाग नहीं हो सकते? (यह जावा में उत्तर देना मुश्किल बना देगा, क्योंकि अधिकांश कार्यक्रमों में public static void mainकहीं न कहीं एक हिस्सा होता है।) या बस आप एक फ़ंक्शन नहीं लिख सकते हैं जिसे तीनों में कहा जाता है?
पाओलो एबरमन

@ Pa theloEbermann इसका अर्थ है उत्तरार्द्ध: प्रत्येक 3 कार्यक्रमों में से प्रत्येक अपने आप ही कार्यशील होना चाहिए।
जर्बर्ग

जवाबों:


16

CJam, 165 147 114 114 108 99 बाइट्स

2 _ri^_q+@"quinesmutualthree"6/=?
1 _ri^_q+@"quinesmutualthree"6/=?
3 _ri^_q+@"quinesmutualthree"6/=?

एक सुझाव के लिए @ मार्टिनबटनर का धन्यवाद जिसने 48 बाइट बचाने में मदद की!

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

सत्यापन

$ cat A
2 _ri^_q+@"quinesmutualthree"6/=?
$ cat B
1 _ri^_q+@"quinesmutualthree"6/=?
$ cat C
3 _ri^_q+@"quinesmutualthree"6/=?
$ 

$ cjam A < A
three
$ cjam A < B
3 _ri^_q+@"quinesmutualthree"6/=?
$ cjam A < C
1 _ri^_q+@"quinesmutualthree"6/=?
$ 

$ cjam B < A
3 _ri^_q+@"quinesmutualthree"6/=?
$ cjam B < B
mutual
$ cjam B < C
2 _ri^_q+@"quinesmutualthree"6/=?
$ 

$ cjam C < A
1 _ri^_q+@"quinesmutualthree"6/=?
$ cjam C < B
2 _ri^_q+@"quinesmutualthree"6/=?
$ cjam C < C
quines

विचार

सेट {0, 1, 2, 3} ऑपरेशन ^ (बाइनरी एक्सक्लूसिव OR) के तहत एक समूह है , जहां प्रत्येक तत्व का अपना व्युत्क्रम है।

यदि पहले वर्ण ( {0, 1, 2, 3} का एक तत्व) को छोड़कर सभी तीन कार्यक्रम समान हैं , तो हम उन्हें आसानी से भेद और मुद्रित कर सकते हैं:

  • हम स्रोत कोड और इनपुट की शुरुआत में अंक XORing द्वारा शुरू करते हैं।

  • यदि परिणाम 0 , स्रोत और इनपुट मैच में है।

    इस प्रकार, हम इस सामान्य अंक द्वारा चयनित तीन शब्दों में से एक को प्रिंट करते हैं।

  • यदि परिणाम 0 नहीं है , तो यह {1, 2, 3} का तत्व है जो न तो स्रोत में है और न ही इनपुट में है।

    इस प्रकार, हम इसे प्रिंट करते हैं, बाकी इनपुट के बाद।

यह काम किस प्रकार करता है

2                                  e# Push the number N on the stack.
  _                                e# Push a copy.
    r                              e# Read a token from STDIN, i.e., the input up
                                   e# to and excluding the next whitespace char.
     i                             e# Cast to integer.
      ^                            e# XOR it with the copy of N. Result: X
       _                           e# Push a copy of the result.
        q+                         e# Append the rest of the input.
          @                        e# Rotate N on top of the stack.
           "quinesmutualthree"6/   e# Push ["quines" "mutual" "three"].
                                =  e# Select the word at index N.
                                 ? e# If X is non-zero, select the modified input;
                                   e# otherwise, select the word.

2
वाह, मैंने सवाल पढ़ा और सोचा "उसके लिए जवाब देने के लिए कोई नहीं आने वाला है।" तब मैंने नीचे देखा और डेनिस (जो और?) +1 का जवाब देखा।
लेवल रिवर सेंट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.