दो तार जोड़ना


18

परिचय

मान लीजिए कि S 1 = a...bऔर S 2 = है ..c..। यदि हम उन्हें एक-दूसरे के ऊपर रखते हैं, तो हमें यह मिलता है:

a...b
..c..

हम .तरल पदार्थ के रूप में (जिसे ओवरलैप किया जा सकता है) दोनों तारों को मिलाते हैं। हमें यह मिलता है:

a.c.b

यदि स्ट्रिंग में से एक दूसरे से अधिक लंबी है, तो हम बस एक ही एल्गोरिथ्म लागू करते हैं:

a.....b
..c..  

becomes:

a.c...b

तथा

a.....b
..c.......

becomes:

a.c...b...

यदि दो वर्ण टकराते हैं, तो हम नीचे के वर्ण का उपयोग करते हैं, जैसे

a..b
...c

becomes:

a..c

काम

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

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

Input              Output
a....b ..c...      a.c..b
aaaaaa bbbbbb      bbbbbb
ab.ab. b.b.b.      bbbab.
a.......b c        c.......b

यह , इसलिए कम से कम बाइट्स जीत के साथ जमा करना!


क्या इनपुट a.....b ..c.......संभव है? फिर आउटपुट क्या है?
लुइस मेंडो

@DonMuesli बन जाएगा a.c...b...
अदनान

क्या हम एक स्ट्रिंग के बजाय वर्णों की सूची तैयार कर सकते हैं?
डेनकर

@DenkerAffe नहीं, क्षमा करें
अदनान

क्या तारों को विपरीत क्रम में लिया जा सकता है?
मीगो

जवाबों:


10

जेली , 5 बाइट्स

Œu»Œl

कमांड-लाइन तर्कों के माध्यम से इनपुट।

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

व्याख्या

यह मेरे सीजेएम उत्तर का एक सीधा पोर्ट है (देखें कि स्पष्टीकरण के लिए यह क्यों काम करता है):

Œu     # Convert first argument to upper case.
  »    # Element-wise maximum between both strings.
   Œl  # Convert result back to lower case.

5
Nooo! आप जेली को भी नहीं अपना सकते हैं! हम गोल्फिंग स्वामी के रूप में सभी mods के साथ छोड़ दिया जाएगा।
आरए

@rikerw हाहा, क्यों तुम सोचते हो कि वे मॉड हैं? क्योंकि वे गोल्फ में अच्छे हैं: P
cat

3
@ रिकर मुझे सिर्फ जेली के लिए अपना समाधान पोर्ट करके किसी और की पिटाई करनी थी। ¯ \ _ (ツ) _ / ¯
मार्टिन एंडर

15

CJam, 9 बाइट्स

leul.e>el

इसका परीक्षण यहां करें।

व्याख्या

इस तथ्य का उपयोग करता है कि '.' < upper case letters < lower case letters। इस तरह, जब दो तारों के बीच तत्व-वार अधिकतम लिया जाता है, तो कोई भी पत्र एक ओवरराइड करता है ., लेकिन हम दूसरे इनपुट से एक पत्र बना सकते हैं यदि हम पहले ऊपरी मामले में पहले से एक पत्र को ओवरराइड करते हैं। भ्रमित? यहाँ उदाहरण के रूप में परीक्षण के मामलों में से एक है:

ab.ab.
b.b.b.

ऊपरी मामले में पहले परिवर्तित करें:

AB.AB.
b.b.b.

तत्व-वार अधिकतम लें:

bBbAb.

लोअर केस में वापस कन्वर्ट करें:

bbbab.

और यहाँ है कि कैसे कोड करता है:

l    e# Read first line.
eu   e# Convert to upper case.
l    e# Read second line.
.e>  e# Take element-wise maximum. If the lengths are different, the additional elements
     e# from the longer list are just appended.
el   e# Convert back to lower case.

4
अच्छा eu/ elचाल!
लुइस मेन्डो

6

जावास्क्रिप्ट ईएस 6, 52 55 वर्ण

(a,b)=>b.replace(/\./g,(m,i)=>a[i]||m)+a.slice(b.length)

परीक्षा

f=(a,b)=>b.replace(/\./g,(m,i)=>a[i]||m)+a.slice(b.length)
;`
a....b ..c...      a.c..b
aaaaaa bbbbbb      bbbbbb
ab.ab. b.b.b.      bbbab.
a.......b c        c.......b
c a....b           a....b
`.split('\n').filter(Boolean).map(s=>s.split(/\s+/)).every(a=>f(a[0],a[1])==a[2])

1
यह इनपुट के लिए विफल रहेगा जैसे:f('c', 'a....b')
andlrc

@ देव-नल, निश्चित
Qwertiy




3

हास्केल, 43 42 बाइट्स

(a:b)#(c:d)|c<'a'=a:b#d|1<2=c:b#d
a#b=a++b

उपयोग उदाहरण: "ab.ab." # "b.b.b." -> "bbbab."

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

  • यदि दोनों सूची गैर-रिक्त हैं, तो 1 सूची के प्रमुख को चुनें यदि दूसरी सूची का "."प्रमुख है, तो दूसरी सूची के प्रमुख को चुनें। सूचियों की पूंछ के साथ एक पुनरावर्ती कॉल को जोड़ें।

  • यदि कम से कम एक सूची खाली है, तो दोनों सूची संलग्न करें।

संपादित करें: @Lynn ने एक बाइट को बचाया। धन्यवाद!


"आप मान सकते हैं कि इनपुट में केवल अवधि और निचले अक्षर हैं" , इसलिए आप c<'a'एक बाइट को बचाने के लिए जांच कर सकते हैं ।
लिन

3

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

lambda s,t:`map(max,s.upper(),t)`[2::5].lower()

बहुत गोल्फ! मैं ऊपरी () और निचले () से छुटकारा पाने का एक रास्ता ढूंढ रहा हूं लेकिन अब तक कोई भाग्य नहीं ...
मैक्स

2

जूलिया, 101 बाइट्स

f(s,t,r=i->rpad(i,max((n=endof)(s),n(t)),"."))=join([min(a,b)<90?max(a,b):b for(a,b)=zip(r(s),r(t))])

यह एक ऐसा फंक्शन है जो दो स्ट्रिंग्स को स्वीकार करता है और एक स्ट्रिंग लौटाता है।

हम mदो इनपुट की अधिकतम लंबाई के रूप में गणना करते हैं, फिर एक फ़ंक्शन को परिभाषित करते हैं rजो अपने इनपुट .को लंबाई के साथ जोड़ता है mऔर फ़ंक्शन तर्क के रूप में संग्रहीत करता है। हम फिर zipसही गद्देदार इनपुट्स और प्रत्येक जोड़ी के न्यूनतम (एएससीआईआई कोड द्वारा परिभाषित) की जांच करते हैं। यदि यह एक है ., तो हम जो भी बड़ा कोड है का उपयोग करते हैं, अन्यथा हम दूसरे इनपुट से आए जो भी उपयोग करते हैं। परिणामस्वरूप सरणी joinको एक स्ट्रिंग में एड किया जाता है और वापस किया जाता है।



1

रेटिना , ५५

$

+ `(?; (\ S *) (\ w) | (\ S) (\ S *)?)? (\ _ S *।))
$ 2 $ 5 $ 6 $ 3 $ 4


लाइन 5 एक सिंगल स्पेस है। लाइन 6 एक खाली लाइन है (जिसमें कोई नई सीमा नहीं है)।

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

मैंने इसे GNU सेड में शुरू किया, (-r विकल्प के साथ)। एक बार जब मैं सरीसृपों का पता लगाता हूं तो एक बार रेटिना के लिए सीधा बंदरगाह। Sed संस्करण है:

s/$/ /
:
s/(.?(\S* )(\w)|(\S)(\S* ).?)(\S* .*)/\2\5\6\3\4/
t
s/ *//

1
रेटिना संस्करण के साथ विफलa..k.f....b c...f.g...g. => .c..kffg...g
यादृच्छिक

1

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

lambda x,y:"".join([k if k!="."and k else j for j,k in map(None,x,y)])

यहाँ कोशिश करो!

पहले हम दोनों स्ट्रिंग को एक सूची में ज़िप बनाते हैं। यदि दूसरा तार पहले से अधिक लंबा है, तो यह None( map(None,x,y)ऐसा करता है) गद्देदार होता है।
फिर हम इस सूची jमें पहले स्ट्रिंग से चरित्र और kदूसरे स्ट्रिंग से एक के साथ पुनरावृति करते हैं । हम चुनेंगेk अगर यह एक बिंदु नहीं है और अन्यथा j

यह 61 बाइट्स हो सकता है अगर मैं एक स्ट्रिंग के बजाय वर्णों की सूची के रूप में परिणाम का उत्पादन कर सकता हूं।


1

पर्ल, 48 + 3 = 51 बाइट्स

s/\./substr($^I,$.=pos,1)||$&/ge;$_.=substr$^I,$.

बाह एक छोटे समाधान नहीं मिल सकता है। (@ Qwertiy's जावास्क्रिप्ट जवाब के रूप में एक ही दृष्टिकोण)।
आवश्यक है -plऔर से इनपुट लेता है stdinऔर-i

$ perl -i'a...ce' -ple's/\./substr($^I,$.=pos,1)||$&/ge;$_.=substr$^I,$.' <<< '..b.d..f'
a.b.de..f

लक्ष्य स्ट्रिंग को पूर्व-विस्तारित करें (जो बहुत सुंदर दिखता है):$_^=$^I^$^I;s/\.|\0/substr$^I,pos,1or$&/ge
टन हास्पेल


0

क्यू / केडीबी +, ४३ ४० बाइट्स

समाधान:

lower{l:max(#:)each(x;y);upper[l$x]|l$y}

उदाहरण:

q)lower{l:max(#:)each(x;y);upper[l$x]|l$y}["a..b..";"...c"]
"a..c.."

स्पष्टीकरण:

(#:)                // k equivalent of count
max (#:) each(x;y)  // takes each string, count the length, return maximum
l$x                 // whites-space pad string x to length l
|                   // take the maximum (per Martin's strategy)
upper[...]          // convert padded string 1 to uppercase
lower{...}          // convert result of function to lowercase

नोट: मैं का लाभ लेने जा रहा हूँ "को देखते हुए दो गैर खाली तार " और यह सोचते हैं कि आदानों तार कर रहे हैं। Kdb "c"में एक परमाणु है, (),"c"एक तार है, अन्यथा स्कोर में 6 बाइट जोड़ने की जरूरत है, क्योंकि हम $एक परमाणु को पैड करने के लिए उपयोग नहीं कर सकते हैं ...

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