क्या यह पहाड़ी है?


29

चुनौती

इस चुनौती के लिए, एक पहाड़ी स्ट्रिंग वह है जो व्याकरण के नियम के अनुरूप है M: x(Mx)*जहां प्रत्येक उत्पादन पर, सभी x समान वर्ण हैं। जब इंडेंट किया जाता है, तो एक पहाड़ी स्ट्रिंग कुछ इस तरह दिख सकती है:

A
 B
  C
   D
  C
   E
    F
   E
  C
 B
A

जैसा कि आप देख सकते हैं, यह पक्ष से एक पहाड़ जैसा दिखता है।

औपचारिक परिभाषा

  • कोई भी एक पात्र aपहाड़ी होता है।
  • यदि Sएक पहाड़ी स्ट्रिंग है और aएक चरित्र है, तो aSaपहाड़ी है, जहां juxtaposition स्ट्रिंग के संघनन का प्रतिनिधित्व करता है।
  • अगर aSaऔर aTaपहाड़ी तार हैं, तो aSaTaएक पहाड़ी तार है। ध्यान दें कि यह नियम बताता है कि यह पैटर्न किसी भी संख्या में पुनरावृत्ति के लिए है। (यानी aSaTaUa, aSaTaUaVa, aSaTaUaVaWa... सभी पहाड़ी कर रहे हैं।)

उदाहरण

उदाहरण के लिए, सभी विषम-लंबाई वाले पलिंड्रो पहाड़ हैं:

t
 a
  c
   o
  c
 a
t

qwertytrasdfdgdsarewqjklkjq एक कम तुच्छ उदाहरण है:

q
 w
  e
   r
    t
     y
    t
   r
    a
     s
      d
       f
      d
       g
      d
     s
    a
   r
  e
 w
q
 j
  k
   l
  k
 j
q

उदाहरण आउटपुट

a                           ==> true
aaa                         ==> true
mom                         ==> true
tacocat                     ==> true
qwertytrasdfdgdsarewqjklkjq ==> true
wasitacaroraratisaw         ==> true
abcbcbcbcba                 ==> true
aaaaabcbbba                 ==> true

<empty string>              ==> false
aa                          ==> false
pie                         ==> false
toohottohoot                ==> false
asdfdghgfdsa                ==> false
myhovercraftisfullofeels    ==> false

नियम

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

4
एक परीक्षा का मामला aaaअच्छा होगा, जहां एक ही चरित्र को कई स्तरों पर उपयोग करने की आवश्यकता होती है।
मार्टिन एंडर

क्या आप इसके बारे में निश्चित हैं wasitacaroraratisaw? यह मुझे बहुत अच्छा लगता है
टन हास्पेल

wasitacaroraratisawवास्तव में पहाड़ी AFAICT है
ETHproductions

इसलिए यह। मुझे लगता है कि मैं सिर्फ एक 'लगभग पैलिंड्रोम' खोजने की कोशिश कर रहा था, लेकिन मुझे दुर्घटना से एक पहाड़ी स्ट्रिंग मिली।
बीफस्टर

2
मैंने सोचा था कि इसके पहले चरित्र पर स्ट्रिंग को विभाजित करके हल करना आसान होगा, लेकिन ऐसे मामले aaaकाम नहीं करते हैं।
xnor

जवाबों:




6

पर्ल, 22 बाइट्स

के लिए शामिल +हैp

perl -pe '$_=/^((.)((?1)\2)*)$/' <<< abcbcbcbcba

सत्य के लिए प्रिंट 1, असत्य के लिए कुछ भी नहीं


5

ब्रेन-फ्लैक , 78 बाइट्स

({()<<>(([{}]({}))([{}]({}))<>[({}<>)])>{[()()]((<()>))}<{}{}{}<>>}(())){{}}{}

इसे ऑनलाइन आज़माएं!

सत्य के लिए प्रिंट 1, असत्य के लिए कुछ भी नहीं।

एक पहाड़ी शब्द को सत्यापित करने के लिए, यह मान लेना पर्याप्त है कि शब्द जब भी संभव हो पहाड़ को "नीचे" कर देता है।



3

प्रोलॉग (एसडब्ल्यूआई) , 29 बाइट्स

a-->[X],+X.
+X-->[];a,[X],+X.

इसे ऑनलाइन आज़माएं!

यह कार्यक्रम एक डीसीजी नियम को परिभाषित करता है a//0जो किसी भी स्ट्रिंग (पात्रों की सूची) से मेल खाता है जो एक पहाड़ी स्ट्रिंग है।

व्याख्या

इस कार्यक्रम के लिए मैं पहाड़ी स्ट्रिंग्स के लिए थोड़ी अलग लेकिन समकक्ष परिभाषा का उपयोग करता हूं, जो चुनौती में वर्णित है: एक पहाड़ी स्ट्रिंग एक वर्ण है cजिसके बाद पर्वतीय तारों का एक नंबर (शून्य हो सकता है) cउनके छोर पर टैकल किया जाता है। अधिक प्रचलित रेगेक्स व्युत्पन्न संकेतन में, एक पहाड़ी स्ट्रिंग पैटर्न से मेल खाना चाहिए c(Mc)*जहां Mएक पहाड़ी स्ट्रिंग है और *इसका मतलब है कि कोष्ठक में अभिव्यक्ति शून्य या अधिक बार दोहराई जाती है। ध्यान दें कि जबकि प्रत्येक cको समान वर्ण होना चाहिए, प्रत्येक Mको एक ही पहाड़ी स्ट्रिंग होने की आवश्यकता नहीं है।

समतुल्यता का प्रमाण

यह स्पष्ट है कि चुनौती से नियम 1 और 2 मेरे नियम के बराबर हैं जहां Mcक्रमशः शून्य और एक बार होता है।

मामले में पहाड़ी स्ट्रिंग है कि Mcहोने वाली nबार जहां n > 1उसके बाद स्ट्रिंग के रूप में लिखा जा सकता है cMcScजहां Sउत्तरार्द्ध है n - 1बार है कि Mcहोता है पिछले छोड़कर c(ध्यान दें कि Mकिसी भी पहाड़ी स्ट्रिंग जरूरी अन्य रूप में ही है और नहीं M)। चूंकि Mएक पहाड़ी स्ट्रिंग है, नियम 2 से, cMcएक पहाड़ी स्ट्रिंग होना चाहिए। या तो Sएक पहाड़ी स्ट्रिंग है, जिस स्थिति cScमें एक पहाड़ी स्ट्रिंग है या एक बार जिसका मतलब होता है कि यह पहाड़ी भी होगा। इस प्रकार चूंकि पहाड़ी है और यदि हैS इसे फिर से लिखा जा सकता है, cMcTcजहां Tबाद वाला n - 2समय Mcहोता है जो अंतिम को छोड़कर होता है c। तर्क की यह रेखा तब तक लागू रह सकती है जब तक कि स्ट्रिंग में पहाड़ी होने की गारंटी नहीं हैMccMccMc और cM'cपहाड़ी तो कर रहे हैं cMcM'cहोना चाहिए पहाड़ी पूरी स्ट्रिंग पहाड़ी होना चाहिए।

ऐंठन के लिए, एक स्ट्रिंग के लिए, cScTcजहां cScऔर cTcपहाड़ी हैं तो या तो cScनियम 2 या नियम 3 से एक पहाड़ी स्ट्रिंग है। यदि यह नियम 2 से एक पहाड़ी स्ट्रिंग है, तो Sएक पहाड़ी स्ट्रिंग भी होना चाहिए। यदि यह नियम 3 से एक पहाड़ी स्ट्रिंग है, तो cScउस फॉर्म का होना चाहिए cUcVcजहां cUcऔर cVcपहाड़ी तार हैं। चूंकि cUcऔर इस प्रकार स्ट्रिंग मेरी परिभाषा के अनुसार पहाड़ी है।cVccSc नियम 3 से कम अभी भी कम से कम दो वर्ण होने चाहिए और नियम 3 को लागू होने के लिए कम से कम 5 वर्ण की आवश्यकता होती है, इसलिए नियम 3 के आवेदनों की बारीक संख्या के बाद नियम 3 के cअनुप्रयोगों द्वारा चयनित प्रत्येक स्ट्रिंग के लिए एक पहाड़ी होना चाहिए स्ट्रिंग। तर्क की एक ही पंक्ति को लागू किया जा सकता हैcTc

चूँकि मेरी परिभाषा से मेल खाने वाला कोई भी तार पहाड़ी है और मेरी परिभाषा सभी पहाड़ी तारों से मेल खाती है, यह प्रश्न में दिए गए के बराबर है।

संहिता की व्याख्या

कुल मिलाकर a//0DCG नियम, पहली पंक्ति पर परिभाषित, किसी भी पहाड़ी स्ट्रिंग से मेल खाता है। +//1DCG नियम (विधेय की तरह, DCG नियम ऑपरेटर नाम दे किया जा सकता है ), लाइन दो पर परिभाषित, उसमें कोई स्ट्रिंग है कि चरित्र के रूप में अपने तर्कों से पारित कर दिया साथ शून्य या अधिक पहाड़ी तार के एक दृश्य से बना है से मेल खाता है Xउनमें से समाप्त होता है पर हमला बोला । या regex की तरह अंकन मैं ऊपर का इस्तेमाल किया, उधार लेने के लिए a//0मैचों c(Mc)*लेकिन वास्तव में मिलान का काम आउटसोर्स (Mc)*करने के लिए +//1जो समय लगता है cअपने तर्क के रूप में X

लाइन द्वारा कोड इस प्रकार व्यवहार करता है:

a-->[X],+X.

यह रेखा DCG नियम को परिभाषित करती है a[X]कहा गया है कि पहले वर्ण वर्तमान में अपरिभाषित चर के बराबर होना चाहिए X। यह Xपहले वर्ण के बराबर सेट होने के परिणामस्वरूप होता है। +Xतो कहा गया है कि स्ट्रिंग के बाकी DCG नियम से मेल खाना चाहिए +//1चरित्र उस के साथ Xअपने तर्क के रूप में करने के लिए निर्धारित है।

+X-->[];a,[X],+X.

यह रेखा +//1DCG नियम को परिभाषित करती है । ;प्रोलॉग का प्रतिनिधित्व करता है या इसका मतलब है कि स्ट्रिंग []या तो मेल कर सकती है या a,[X],+X[]खाली स्ट्रिंग का प्रतिनिधित्व करता है इसलिए खाली स्ट्रिंग +//1से मेल खाने में हमेशा सक्षम होता है। यदि स्ट्रिंग खाली नहीं है, तो इसकी शुरुआत का मिलान होना चाहिए a//0और इसलिए एक पहाड़ी स्ट्रिंग होना चाहिए। इसके बाद जो भी चरित्र Xनिर्धारित किया जाता है, उसका पालन करना चाहिए । अंत में बाकी स्ट्रिंग मैच होना चाहिए +X


2

भूसी , 15 बाइट्स

εωφΓ§?t·:⁰`(=←t

इसे ऑनलाइन आज़माएं! टाइप इंफ़ेक्शन में लगभग 40 सेकंड लगते हैं, इसलिए धैर्य रखें।

व्याख्या

εωφΓ§?t·:⁰`(=←t  Implicit input, say s = "abacdca"
 ω               Apply until fixed point is reached
  φ              this self-referential anonymous function (accessed with ⁰):
                  Argument is a string x.
   Γ              Deconstruct x into head h and tail t.
    §?t·:⁰`(=←t   Call this function on h and t. It is interpreted as §(?t)(·:⁰)(`(=←t)).
                  § feeds h to (·:⁰) and (`(=←t)), and calls (?t) on the results.
                  The semantics of ? cause t to be fed to all three functions.
          `(=←t   First, check whether h equals the first element (←) of the tail of t.
     ?t           If it does (e.g. if h='a' and t="bacdca"), return tail of t ("acdca").
                  Otherwise (e.g. if h='b' and t="acdca"),
       · ⁰        call the anonymous function recursively on t: "aca"
        :         and prepend h to the result: "baca".
                 Final result is "a".
ε                Is it a 1-element string? Implicitly print 0 or 1.

यह विचार बार-बार फॉर्म के एक विकल्प को प्रतिस्थापित करना abaहै aजब तक कि यह अब संभव नहीं है। यदि यह एकल-वर्ण स्ट्रिंग (जो εपरीक्षण है) में परिणाम होने पर इनपुट केवल पहाड़ी है । एकमात्र खतरनाक स्थिति है जब हमारे पास इस तरह से एक स्ट्रिंग है, जहां abaएक चोटी नहीं लगती है:

a
 b
  a
   c
  a
   d
  a
 b
a

सौभाग्य से, हम हमेशा इसे एक में बदल सकते हैं:

a
 b
a
 c
a
 d
a
 b
a

मेरा मानना ​​है कि trueमामलों के लिए एकल चरित्र लौटाना और अन्यथा "सुसंगत" नहीं होगा।
जोनाथन एलन

वास्तव में यह इसे धक्का दे सकता है, क्योंकि उस और एक नो-ऑप के बीच कोई स्पष्ट रेखा नहीं है ("एक पहाड़ी स्ट्रिंग लौटाता है जब पहाड़ी और अन्यथा नहीं") जो स्पष्ट रूप से एक खामियाजा होगा।
जोनाथन एलन

@JonathanAllan एकल वर्ण बनाम अन्य तार मेरे लिए भी थोड़ा अस्पष्ट है, खासकर जब से इसका सत्यता से बहुत कम संबंध है (केवल खाली स्ट्रिंग भूसी में मिथ्या है)।
20

हां, "किसी भी प्रतिनिधित्व" को स्पष्ट रूप से बहुत उदार है - मैंने ओपी :) पर एकतरफा टिप्पणी की है
जोनाथन एलन

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


1

जावास्क्रिप्ट (Node.js) , 53 बाइट्स

मुझे लगता है कि ऐसा करने का यह सबसे सरल तरीका है?

f=s=>(w=s.replace(/(.).\1/,"$1"))==s?w.length==1:f(w)

इसे ऑनलाइन आज़माएं!

जावास्क्रिप्ट (Node.js) , 72 बाइट्स

कम तुच्छ, लेकिन बहुत लंबा।

s=>[...s].reduce((a,x)=>(a[a.length-2]==x?a.pop():a.push(x),a),[])==s[0]

इसे ऑनलाइन आज़माएं!

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