एक म्यू पहेली सॉल्वर बनाएँ


16

एमयू पहेली एक पहेली है जिसमें आप पता लगाना है कि क्या आप बदल सकते हैं है MIमें MUनिम्नलिखित कार्यों को देखते हुए:

  1. यदि आपकी स्ट्रिंग समाप्त हो जाती है I, तो आप Uअंत में एक जोड़ सकते हैं । (उदा MI -> MIU)

  2. यदि आपकी स्ट्रिंग शुरू होती है M, तो आप उसके बाद के भाग की एक प्रति संलग्न कर सकते हैंM स्ट्रिंग के ।
    (उदा MII -> MIIII)

  3. यदि आपके स्ट्रिंग में लगातार तीन होते हैं I, तो आप उन्हें एक में बदल सकते हैं U
    (उदा MIII -> MU)

  4. यदि आपके तार में लगातार दो होते हैं U , तो आप उन्हें हटा सकते हैं। (जैसे MUUU -> MU)।

आपका कार्य एक ऐसे कार्यक्रम का निर्माण करना है जो यह निर्धारित करता है कि क्या यह किसी भी शुरुआत और खत्म करने के लिए संभव है।

आपका कार्यक्रम इनपुट के रूप में दो तार ले जाएगा। प्रत्येक स्ट्रिंग में निम्नलिखित शामिल होंगे:

  • एक M

  • उनतीस तक की एक स्ट्रिंग IऔरU 's ।

आपका कार्यक्रम फिर लौट आएगा true दूसरा स्ट्रिंग पहले स्ट्रिंग से पहुंच योग्य है, और false(या YPLRT) नहीं है (या आपकी प्रोग्रामिंग भाषा का प्रतिनिधित्व / YPLRT) ।

उदाहरण इनपुट और आउटपुट:

MI  MII
true

MI  MU
false

MIIIIU  MI
true

इस जीत के लिए किसी भी भाषा में सबसे छोटा कोड।


8
मैं वर्तमान में गोडेल, एस्चर, बाच पढ़ रहा हूं और इसके अध्यायों के आधार पर "18-होल गोल्फ कोर्स" करने के बारे में सोचा। लगता है कि मुझे अब एक नया "छेद 1" मिल गया है। ;)
मार्टिन एंडर

यह सिर्फ एक ग्राफ़ रीचबिलिटी प्रश्न है जिसका सार पहले बहुत बार पूछा जा चुका है।
पीटर टेलर

1
@PeterTaylor मुझे लगता है कि यह एक अच्छा मौका है जो कि रीचबिलिटी ग्राफ की स्पष्ट खोज से हल नहीं होगा। MIU के नियमों में बहुत अधिक संरचना है, और मुझे आश्चर्य नहीं होगा अगर इंटरमीडिएट नोड्स की खोज के बिना रीचैबिलिटी का परीक्षण करने के लिए एक सीधा एल्गोरिदम है। उदाहरण के लिए, से प्राप्त नोड्स MIठीक उसी M(I|U)*जगह हैं जहां संख्या I3. की ​​एक संख्या नहीं है। और ऐसा सीधा चेक निश्चित रूप से छोटे कोड के लिए बनाता है। इसके अलावा, मैं मध्यवर्ती चरणों के लिए आवश्यक तार की लंबाई पर बंधे एक पूर्व-प्राथमिकता के बारे में नहीं जानता, इसलिए प्रत्यक्ष खोज केवल अव्यावहारिक हो सकती है।
xnor

1
मैंने थोड़ी देर के लिए इस समस्या के बारे में सोचा है और एक समाधान के करीब नहीं पहुंचा है जो कि जानवर-बल नहीं है। यदि कोई नहीं काटता है, तो मैं प्रश्न का एक आसान संस्करण पोस्ट करने का सुझाव देता हूं, शायद MIकिसी दिए गए उपलब्ध स्ट्रिंग से शुरू होने वाली व्युत्पत्ति देने के लिए ।
xnor

1
यदि IMआपूर्ति की जाती है या क्या आउटपुट होना चाहिए MUMMI?
बीटा क्षय

जवाबों:


7

एसडब्ल्यूआई प्रोलॉग, 183 वर्ण

m(A,A).
m([i],[i,u]).
m([i,i,i|T],B):-m([u|T],B).
m([u,u|T],B):-m(T,B).
n([m|A],[m|B]):-(m(A,B);append(A,A,X),m(X,B)).
n(A,B):-m(A,B).
s(A,B):-atom_chars(A,X),atom_chars(B,Y),n(X,Y).

कैसे कुछ प्रोलॉग के बारे में, (क्योंकि किसी ने 6 महीने में जवाब नहीं दिया है)। चलाने के लिए, बस "s (mi, mu)" का उपयोग करें। कोड परमाणुओं को चार्ट में तोड़ता है, फिर समाधान के लिए खोज करता है।


2
यह गलत तरीके से गलत है s(mi,miiii), और सामान्य रूप से नियम 2 के एक से अधिक आवेदन की आवश्यकता होती है।
एलगोरिदमशार्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.