वास्तविक जीवन में संबंध


14

में @ एडम Dyalog एपीएल विस्तारित , (नीचे) ऑपरेटर साधन विकार: एक समारोह है, तो एक दूसरे समारोह है, तो पहले के व्युत्क्रम लागू होते हैं। संयुग्मन के संदर्भ में वास्तविक जीवन की क्रियाओं के बारे में सोचना मज़ेदार है:

एक समस्या को g द्वारा दूसरे डोमेन में बदल दिया जाता है जहाँ इसे f द्वारा अधिक आसानी से हल किया जाता है, और फिर वापस मूल डोमेन में बदल दिया जाता है। वास्तविक जीवन से एक उदाहरण है "संवेदनाहारी के तहत":

apply anesthetics
    perform surgery
wake up from anesthetics

चुनौती

एक पंक्ति gका व्युत्क्रम "संयुक्त राष्ट्र" है g, जो इसके विपरीत है, और इसके विपरीत। किसी भी रेखा को sउसके क्रम के बीच और उस क्रम में "अंडर" के रूप में परिभाषित करें sfइनपुट में प्रत्येक पंक्ति के लिए:

  • यदि fऔर इसका विलोम दोनों होते हैं, तो कुछ भी न करें
  • यदि fकोई अन्य कार्रवाई "अंडर" नहीं है, तो प्रिंट करेंf
  • यदि fएक लाइन "अंडर" है g, तो प्रिंट करें f + " under " + gजहां +कॉन्सेप्टन है।

इनपुट

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

उत्पादन

उसी प्रारूप में आउटपुट जिसमें आपने इनपुट लिया था, या मानक I / O द्वारा अनुमति दी गई थी।

परीक्षण के मामलों:

Input:
apply anesthetics
perform surgery
unapply anesthetics

Output:
perform surgery under apply anesthetics


Input:
unite asia
establish the silk road
ite asia

Output:
establish the silk road under unite asia


Input:
desire a book
walk to store
take the book
pay for the book
unwalk to store
read the book

Output:
desire a book
take the book under walk to store
pay for the book under walk to store
read the book


Input:
drink excessively
undrink excessively

Output:
[empty string]

2
जब मैं अत्यधिक पीता हूं, तब भी मेरे पास कोई आउटपुट नहीं है
स्टेन स्ट्रम

1
यह नहीं होना चाहिए "पुस्तक ले लो और पुस्तक के लिए भुगतान के तहत चलने के लिए भुगतान करें"? अन्यथा यह स्पष्ट नहीं है कि परिवर्तन मूल के बराबर है ...
योना

1
@ जोनाह विचार एक आदर्श दुनिया में है = "स्टोर करने के लिए चलें" और w ^ -1 = "स्टोर करने के लिए अलंकृत" विपरीत हैं, इसलिए गणितीय रूप से wfw ^ -1w ^ -1 = wfgw ^ -1।
lirtosiast

आह निष्पक्ष पर्याप्त, @lirtosiast।
योना

जवाबों:


3

ब्रेकीलॉग , 90 बाइट्स

;Ṡ{hhH↰₂gB&hb~c[A,B,C]&tT;C↔↰U∧" under ",H,T;A↔↰,U|tT&hh,TgJ&hb;T↰Q∧J,Q|h}
~↰₃|↰₃
∧"un";?c

मैंने इसे इस धारणा के तहत बनाया कि यह पुनरावर्ती हो सकता है और कई अंडरस्टैंड्स को स्टैक किया जा सकता है। शायद अनुकूलित नहीं। इसके अलावा यह ब्रेसीलॉग है, प्लंबिंग काफी कुछ बाइट्स लेता है।

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


2

रेटिना , 82 बाइट्स

m{A`^(un)?(.+)¶(?(1)|un)\2$
^((un)?(.+)¶)(.+)¶((.+¶)*(?(2)|un)\3)$
$4 under $1$1$5

इसे ऑनलाइन आज़माएं! लिंक में परीक्षण के मामले शामिल हैं। स्पष्टीकरण:

m{

पूरे कार्यक्रम बहु मोड में चलाएं (ताकि ^और $शुरुआत और अलग-अलग लाइनों के अंत से मेल खाते हैं) और दोहराने जब तक वहाँ कोई परिवर्तन कर रहे हैं।

A`^(un)?(.+)¶(?(1)|un)\2$

उन पंक्तियों की तलाश करें, जिनके साथ शुरू हो सकता है unऔर उसके बाद शुरू होती है एक पंक्ति जो unकेवल तभी शुरू होती है जब पिछली पंक्ति नहीं होती है जबकि शेष रेखा समान होती है, और दोनों पंक्तियों को हटा दें। (यह रेटिना 0.8.2 से व्यवहार का एक बदलाव है, जो मिलान करने की कोशिश करने से पहले लाइनों को विभाजित करता है और इसलिए यदि कभी भी एक बार में एक से अधिक लाइन की आवश्यकता होती है तो लाइनों को कभी भी हटा नहीं सकता है।)

^((un)?(.+)¶)(.+)¶((.+¶)*(?(2)|un)\3)$

उन पंक्तियों की तलाश करें un, जो कम से कम एक पंक्ति के साथ शुरू हो सकती हैं , उसके बाद एक ऐसी unरेखा आती है जो केवल तभी शुरू होती है जब मूल रेखा नहीं होती है जबकि शेष रेखा समान होती है।

$4 under $1$1$5

मूल रेखा को एक रेखा से नीचे ले जाएँ, और इसे भी underकेवल उक्त रेखा से जोड़ दें । (अतिरिक्त लाइनें रिपीट द्वारा नियंत्रित की जाएंगी।)


2

पायथन 2 , 106 बाइट्स

s=input()
x=''
l=[]
for i in s:
 if'un'==i[:2]or'un'+i in s:x=(' under '+i)*(not x)
 else:l+=[i+x]
print l

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

यदि इनपुट STDIN से एक सूची हो सकता है और आउटपुट न्यूलाइन-अलग हो सकता है, तो हमारे पास यह 94-बाइट समाधान है:

s=input()
x=''
for i in s:
 if'un'==i[:2]or'un'+i in s:x=(' under '+i)*(not x)
 else:print i+x

1

जावास्क्रिप्ट (बैबेल नोड) , 91 बाइट्स

लोअरकेस में स्ट्रिंग्स की एक सरणी के रूप में इनपुट लेता है। स्ट्रिंग्स का एक और सरणी देता है।

a=>a.flatMap(s=>s==r|'un'+s==r?(u=u?'':' under '+s,[]):s+u,u='',r=a.find(s=>/^un/.test(s)))

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

टिप्पणी की गई

a =>                     // a[] = input array
  a.flatMap(s =>         // for each string s in a[]:
    s == r |             //   if s matches the reference string
    'un' + s == r ? (    //   or its opposite:
      u =                //     update u:
        u ?              //       if u is not an empty string:
          ''             //         turn it to an empty string
        :                //       else:
          ' under ' + s, //         set it to s with the ' under ' prefix
      []                 //     yield an empty array so that this entry is removed
    ) :                  //   else:
      s + u,             //     yield s followed by u
    u = '',              //   initialize u to an empty string
    r = a.find(s =>      //   initialize r ...
      /^un/.test(s)      //     ... to the string beginning with 'un'
    )                    //
  )                      // end of flatMap()


@ l4m2 वास्तव में विफल। अब तय हो गया।
अरनौलड

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