यह पता लगाएं कि क्या यह स्टैक कैट्स स्टाइल में एक मान्य स्टैक कैट्स प्रोग्राम है!


16

पृष्ठभूमि

स्टैक कैट्स मार्टिन एंडर द्वारा बनाई गई एक प्रतिवर्ती गूढ़ भाषा है। स्टैक कैट्स में प्रत्येक कमांड या तो स्वयं का व्युत्क्रम है (एक सममित चरित्र के रूप में प्रतिनिधित्व किया जाता है, जैसे -_:T|), या इसका व्युत्क्रम कमांड (दर्पण छवि के रूप में प्रतिनिधित्व किया जाता है, जैसे () {} [] <>)। स्टैक कैट्स की एक मजबूत सिंटैक्टिक आवश्यकता है कि पूरे कार्यक्रम को खुद की दर्पण छवि होनी चाहिए। ध्यान दें कि इसका मतलब है कि कोई भी मान्य स्टैक कैट्स प्रोग्राम एक प्राकृतिक दर्पण-छवि अस्पष्ट है

यहां स्टैक कैट्स का पूरा कमांड सेट है:

  • स्व सममित: !*+-:=ITX^_|
  • सममित जोड़े: () {} [] <> \/

कोई अन्य वर्ण अमान्य है; किसी भी पात्र के ऊपर सेट चरित्र में नहीं होने वाले किसी भी इनपुट को गलत आउटपुट देना चाहिए।

भाषा में अतिरिक्त बाधा है कि ()और {}जोड़े हमेशा संतुलित होनी चाहिए, लेकिन सरलता के लिए, आपको इस स्थिति की जांच करने की आवश्यकता नहीं है।

निम्नलिखित एक मान्य स्टैक कैट्स प्रोग्राम के कुछ उदाहरण हैं (फिर से, ध्यान दें कि आप संतुलित पैरेन्स के लिए जाँच नहीं करते हैं):

{[+]==[+]}
[)>^<(]
({T)}|{(T})
<(*]{[:!-_:>}<[<)*(>]>{<:_-!:]}[*)>

ये नहीं हैं:

b<+>d
())(
({[<++<]})

चुनौती

एक प्रोग्राम या फ़ंक्शन लिखें, जो निर्धारित करता है कि दिए गए स्ट्रिंग एक मान्य स्टैक कैट्स प्रोग्राम है। आपका कोड एक प्राकृतिक दर्पण-छवि एम्बिग्राम भी होना चाहिए , जिसका अर्थ है:

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

नोट: आपके कोड में एक मान्य स्टैक कैट्स प्रोग्राम होना आवश्यक नहीं है; इसमें कुछ अतिरिक्त वर्ण हो सकते हैं जिन्हें स्टैक कैट्स में अनुमति नहीं है। (पूरी सूची के लिए नीचे देखें।)

उदाहरण के लिए, निम्नलिखित दो कार्यक्रम सममित हैं (और इस प्रकार एक वैध सबमिशन ), जबकि तीसरा नहीं है:

({bTd})
[<q|p>]
({bTd})
  IXI
({bTd})
IXI
  • "मिरर समरूपता" के बारे में, केवल स्टैक कैट्स-स्टाइल समरूपता पर विचार किया जाता है (उदाहरण के ({IH})लिए एक मान्य सबमिशन नहीं है, भले ही इसमें दर्पण समरूपता हो)।
  • आपके कोड में केवल वर्णों के ये सेट हो सकते हैं, साथ ही नई पंक्ति:
    • स्व-सममित: स्थान ( 0x20) +!"'*+-.8:=AHIMOTUVWXY^_ovwx|
    • सममित जोड़े: () /\ <> [] bd pq {}

एसई पर कोड के रूप में प्रदर्शित होने पर वर्ण सेट को सख्ती से सममित या स्व-सममिति चुना जाता है।

इनपुट और आउटपुट

इनपुट रेंज मुद्रण योग्य ASCII वर्णों की कोई एक-पंक्ति स्ट्रिंग है

आप एक स्ट्रिंग के रूप में इनपुट, चार्ट की एक सूची या एएससीआईआई मूल्यों की सूची चुन सकते हैं।

आप या तो आउटपुट चुन सकते हैं:

  • आपकी पसंद की भाषा द्वारा परिभाषित सत्य / मिथ्या मूल्यों में से कोई भी
    • वास्तविक परिणाम मान इनपुट के बीच भिन्न हो सकते हैं (उदाहरण के लिए एक सत्य इनपुट के लिए आउटपुट 1 और दूसरे सत्य के लिए 2)।
    • सत्य और झूठे मूल्यों की अदला-बदली की अनुमति नहीं है।
  • सत्य / असत्य के लिए कोई भी दो स्थिर मूल्य क्रमशः
    • इस स्थिति में, परिणाम मान दो स्थिर मानों में से एक होना चाहिए।

आपको अपनी सबमिशन विधि और आउटपुट मान को अपने सबमिशन में निर्दिष्ट करना चाहिए।

जीतने की स्थिति

यह , इसलिए प्रत्येक भाषा में सबसे कम बाइट्स जीतती हैं।

टिप्पणियाँ

  • मानक कमियां हमेशा की तरह मनाई जाती हैं।
  • बेशक आप इसे स्टैक कैट्स में हल कर सकते हैं, लेकिन मौका यह है कि आप एक ध्वज का उपयोग नहीं कर सकते हैं जो आपके कोड आकार को आधे से कम करने की अनुमति देता है। और यह गंभीरता से कठिन भाषा है: पी

1
तेज क्यों #ठुकराया गया?
tsh

1
@tsh यह कई फोंट में थोड़ा तिरछा है, एसई पर कोड फॉन्ट (कम से कम यह वही है जो मैं क्रोम पर देखता हूं)।
बब्बलर

@ डलास मैंने इसके आसपास कुछ बिंदुओं को स्पष्ट करने की कोशिश की। लेकिन अगर आपको लगता है कि विवरण अभी भी अस्पष्ट है, तो कृपया संपादित करने के लिए स्वतंत्र महसूस करें।
बब्बलर

जवाबों:


16

जावास्क्रिप्ट (ईएस 6), 487 467 378 298 292 280 266 264 बाइट्स

@ बब्बलर के लिए धन्यवाद 14 बाइट्स बचाए

I=>(V=v=>!I[v]||((T=o=>[[]][+!!A[o]]||[(I[v]!=A[o]||A)[o^o<88/8]]+T(++o))(8-8)==I.pop())*V(++v))(V|(A='(){}[]<>\\/ !*+-:=ITX^_|'))//\\(('|_^XTI=:-+*! \//<>[]{}()'=A)|V)((v++)V*(()qoq.I==(8-8)((o++)T+[[8\88>o^o](A||[o]A=![v]I)]||[[o]A!!+][[]]<=o=T))||[v]I!<=v=V)<=I

एक अनाम फ़ंक्शन को परिभाषित करता है जो वर्णों की एक सरणी लेता है और वांछित आउटपुट देता है। आउटपुट सत्य / मिथ्या है; आमतौर पर 1/ 0, लेकिन खाली स्ट्रिंग देता है true

कैसे?

सबसे स्पष्ट चाल //\\कोड के प्रतिबिंबित संस्करण को टिप्पणी करने के लिए एक केंद्र बिंदु के रूप में उपयोग करना है। उसके बाद, यह केवल दिए गए चारसेट का उपयोग करके समस्या को हल करने के लिए सबसे छोटा तरीका है।

पहला मुद्दा जो हम चलाते हैं, वह कीवर्ड और बिल्ट-इन की कमी है। हमारे पास चमत्कारिक रूप से अभी भी है .pop(), लेकिन बाकी सब कुछ अनुमत ऑपरेटरों (जिसमें शामिल है a[b]और f(c)) के माध्यम से किया जाना चाहिए , लूप का अनुकरण करने के लिए पुनरावृत्ति के साथ।

दूसरा मुद्दा तार्किक ऑपरेटरों की कमी है। न तो &और ?अनुमति दी जाती है, जिसका अर्थ है केवल निर्णय लेने वाला ऑपरेटर जिसका हम उपयोग कर सकते हैं ||। इसलिए, हमें इसके लिए अपने तर्क को ध्यान से देखना होगा।

मैंने जो पहली चीज़ की, वह एक ऐसे फंक्शन को परिभाषित करने के लिए थी Tजो एक व्यक्तिगत चरित्र को प्रतिबिंबित करती है। मूल विचार दर्पण-सक्षम वर्णों की एक स्ट्रिंग में प्रत्येक वर्ण के माध्यम से लूप करना है, दिए गए चार के साथ समानता के लिए प्रत्येक का परीक्षण करना। यदि यह बराबर है, हम पर अपने दर्पण की चार लौटने index^1के लिए (){}[]<>\/, या आराम के लिए चार ही।

पहली समस्या जो मैंने यहां चलाई थी, वह या तो प्रतिबिंबित दर्पण या प्रत्येक पुनरावृत्ति पर मिथ्या मूल्य प्राप्त कर रही थी। मैं आखिरकार जिस समाधान के साथ आया था (x!=A[o]||A)[o^o<88/8], xवह इनपुट कैरेक्टर कहां है, Aमिररिंग वर्णमाला है, और oवर्तमान सूचकांक है। यदि xऐसा नहीं है A[o], तो यह देता है true, और सूचकांक अभिव्यक्ति का मूल्यांकन करता है undefined; अन्यथा, ||Aसक्रिय है, और हम प्राप्त करना समाप्त करते हैं A[o^(o<11)]

दूसरी समस्या यह है कि पुनरावृत्ति को कैसे समाप्त किया जाए। मैंने पाया कि ऐसा करने का सबसे अच्छा तरीका बस हर पुनरावृत्ति के परिणामों को संक्षिप्त करना है, जब समाप्त होने पर रिक्त स्ट्रिंग वापस आ Aजाता है। यह हमें दो और समस्याओं के साथ प्रस्तुत करता है: undefinedएस को खाली तारों में परिवर्तित करना , और खाली स्ट्रिंग को ||कुछ वापस करना। इन्हें सरणी दुर्व्यवहार से हल किया जा सकता है: यदि अपरिभाषित है , [a]+""तो स्ट्रिंग का प्रतिनिधित्व a, या खाली स्ट्रिंग देता aहै। एक बोनस के रूप में, []सत्य है लेकिन खाली स्ट्रिंग को स्ट्रिंग करता है, इसलिए हम आसानी से इसे "सत्य खाली स्ट्रिंग" के रूप में उपयोग कर सकते हैं।

अब हम Tफ़ंक्शन का उपयोग किसी भी एकल वर्ण को मिरर करने के लिए कर सकते हैं । हम रिकर्सिवली ऐसा करते हैं, का दर्पण की तुलना I[v++]करने के लिए I.pop()जब तक वर्ण की सरणी के अंत तक पहुँच गया है। अगर सभी तुलनाएँ सत्य हैं, तो हम उसका उपयोग &&या &जाँच नहीं कर सकते , लेकिन *इसके बजाय इसका उपयोग करें । इन सभी परिणामों को एक साथ गुणा करने पर यह 1पता चलता है कि क्या प्रत्येक वर्ण विपरीत का दर्पण है, या 0यदि कोई तुलना विफल हो जाती है।

और यह मूल रूप से है कि यह उत्तर कैसे काम करता है। मैंने शायद इसे बहुत स्पष्ट रूप से नहीं समझाया था, इसलिए कृपया आपके द्वारा किए गए किसी भी प्रश्न को पूछें और मैंने जो भी गलतियाँ की हैं, उन्हें इंगित करें।


U=([A,...H])=>!(V=H.pop())||!(W=([x,...X]=(T="!*+-:=ITX^_|")+"(){}[]<>\\/",[o,...O]=T+")(}{][></\\")=>!x||((o!=A)+(x!=V))*(W(X,O)))()*U(H)//...280 बाइट्स
टीएस

स्रोत कोड में @tsh अल्पविराम की अनुमति नहीं है, क्योंकि वे सममित नहीं हैं (एसई कोड फ़ॉन्ट में) और कोई दर्पण नहीं है (एएससीआईआई में, वैसे भी)
ETHproductions

क्षमा करें, मेरे द्वारा उस भाग पर ध्यान नहीं गया।
tsh

@tsh मैंने इसे पहले भी याद किया, और केवल 20 मिनट तक एक समाधान पर खर्च किया, ताकि यह महसूस किया जा सके कि यह वैध नहीं है: P
ETHproductions

वैसे भी, चूंकि आपने पहले ही एक जावास्क्रिप्ट समाधान पोस्ट किया था। हमें अब एक और JSF * k सॉल्यूशन की आवश्यकता नहीं है ... // अगर मैं आप होते, तो मैं इसे केवल JSF * के लिए संकलित करके ठीक कर देता ...
tsh

1

स्टेक्स , 76 70 बाइट्स

:Wx^^MH_=_"{([</!*+-:=ITX^_|":W-!*pq*!-W:"|_^XTI=:-+*!\>])}"_=_HM^^xW:

इसे चलाएं और डीबग करें

Stack, Stack Cats का मित्र है और पहले छमाही से Stack Cats कार्यक्रम के बाद के आधे हिस्से को जनरेट करने के लिए इंटर्नल्स है। यदि हम स्रोत पर प्रतिबंध की परवाह नहीं करते हैं और चारसेट की जांच करने की आवश्यकता नहीं है, तो यहां 4-बाइट समाधान है:

4 निवाले

:R_=

इसे चलाएं और डीबग करें

व्याख्या

:Wx^^MH_=_"{([</!*+-:=ITX^_|":W-!*pq...
:W                                         "Mirror" the string
                                           Equivalent to appending the reverse of the string to itself
                                           And map `{([</\>])}` to its mirror in the appended string
  x^^                                      2, but we can't just use `2` here ...
     MH                                    Partition the "mirror"ed string to two parts, take the later part.
       _=                                  The string is the same as the original one (*)
                                           `:Wx^^MH_=` is just `:R_=`, but we can't use `R` here ...
         _                                 Input string
          "{([</!*+-:=ITX^_|":W-           Remove valid characters from input
                                !          The final string is empty (**)
                                 *         (*) and (**)
                                  p        Pop and print result
                                   q       Peek stack and print
                                           Since the stack is now empty, this causes the program to terminate
                                    ...    Not executed

के अस्तित्व Rऔर Wवास्तव में दिलचस्प है। pqसंयोजन द्वारा कार्यक्रम समाप्ति भी मेरे लिए प्रभावशाली है।
बुबलर

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