रिक्त स्थान में पारस्परिक रूप से भरें


11

इसी शब्दों का प्रतिनिधित्व करने वाले अंडरस्कोर के दृश्यों के साथ दो तारों के इनपुट को देखते हुए, "रिक्त" के साथ वाक्यों को भरें।

इस चुनौती का वर्णन करने का सबसे अच्छा तरीका उदाहरण है। यहाँ एक उदाहरण इनपुट है:

programming _____________ and code golf
programming puzzles ______ code ____

और यहाँ इसी उत्पादन है:

programming ___puzzles___ and code golf
programming puzzles _and__ code golf

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

चुनौती का उद्देश्य सही शब्दों के साथ सभी रिक्त स्थान को भरना है , जो ऐसे शब्द हैं जो रिक्त स्थान द्वारा विभाजित होने पर दूसरे स्ट्रिंग में उसी सूचकांक पर कब्जा कर लेते हैं।

  • यह शब्द रिक्त में केंद्रित होना चाहिए, जैसा कि ऊपर दिए गए उदाहरण में "पहेली" शब्द के साथ दिखाया गया है - दोनों तरफ समान संख्या में अंडरस्कोर बने हुए हैं।

  • यदि शब्द बिल्कुल केंद्रित नहीं हो सकता है, तो अतिरिक्त अंडरस्कोर या तो बाईं या दाईं ओर जा सकता है (उदाहरण के लिए "और" ऊपर के उदाहरण में)।

  • शब्द को फिट करने के लिए हमेशा पर्याप्त अंडरस्कोर होगा, लेकिन शब्द की लंबाई (उदाहरण के लिए ऊपर दिए गए उदाहरण में शब्द "गोल्फ") के समान हो सकता है।

  • दोनों तारों में एक ही स्थिति में एक रिक्त कभी नहीं होगा।

इनपुट / आउटपुट निम्न में से कोई भी हो सकता है (इनपुट / आउटपुट जरूरी नहीं कि उसी विधि से हो):

  • किसी भी वर्ण द्वारा अलग किए गए एकल तार जो वर्णनात्मक, एक स्थान या एक अंडरस्कोर नहीं है (उदा। newline या अल्पविराम से अलग स्ट्रिंग)

  • एक सरणी / सूची / आदि। दो तार के

  • दो फ़ंक्शन / कमांड लाइन तर्क (केवल इनपुट)

चूंकि यह , बाइट्स में सबसे छोटा कोड जीत जाएगा।

ऊपर दिए गए उदाहरण का उपयोग परीक्षण के मामले के रूप में किया जा सकता है। यहां एक बड़ा परीक्षण मामला है (अलग-अलग केंद्रक व्यवहार के कारण उत्पादन में दूसरा स्ट्रिंग थोड़ा भिन्न हो सकता है):

lorem _____ dolor _____ amet _______________ adipiscing elit mauris dapibus tincidunt _____________________________ accumsan fringilla proin vulputate viverra lorem fermentum dictum
lorem ipsum ______ sit _______ consectetur _______________ elit mauris dapibus tincidunt metus accumsan fringilla proin vulputate viverra lorem ____________________________ dictum

lorem ipsum dolor _sit_ amet __consectetur__ adipiscing elit mauris dapibus tincidunt ____________metus____________ accumsan fringilla proin vulputate viverra lorem fermentum dictum
lorem ipsum dolor_ sit _amet__ consectetur __adipiscing___ elit mauris dapibus tincidunt metus accumsan fringilla proin vulputate viverra lorem _________fermentum__________ dictum

अच्छा द्विदिश चुनौती।
R

जवाबों:


5

अजगर, ३०

jL;Cmm|*}J\_k.[lkhx#JdJkdCcR;Q

इनपुट और आउटपुट को दो तारों की सूची के रूप में लेता है। एक बहुत ही बुनियादी विभाजन-जिप-डबल मैप-सेंटर-जिप-जॉइन एप्रोच का उपयोग करता है।

इसे यहाँ आज़माएँ

विस्तारित:

jL;Cmm|*}J\_k.[lkhx#JdJkdCcR;Q   ##
                          cR;Q   ##  split
                         C       ##  zip
    mm                           ##  double map
      |*}J\_k.[lkhx#JdJkd        ##  centre
   C                             ##  zip
jL;                              ##  join

मैं एक बार फिर समझाता हूं कि मैं वास्तव में संतुष्ट हूं कि मैं इसे और अधिक नहीं कर सकता, हालांकि यह बहुत स्पष्ट होना चाहिए, विभाजन-जिप-डबल मैप-सेंटर-जिप-जॉइन एप्रोच और सभी की सर्वव्यापकता को देखते हुए।


8
अहह, क्लासिक स्प्लिट-जिप-डबल मैप-सेंटर-जिप-जॉइन एप्रोच। मुझे अपने अल्गोरिद्म 101 के व्याख्यान में एक परिचयात्मक उदाहरण के रूप में इस्तेमाल किए जाने का शौक है।
मार्टिन एंडर

3
@ मार्टिनबटनर हाँ, मुझे इसकी कुछ बुरी यादें हैं क्योंकि मैं उस वर्ग के माध्यम से सोया था, इसके बजाय डुप्लिकेट-एपेंड-लुकबैक-मैच-ऐड-सेंटर दृष्टिकोण का उपयोग करके परीक्षा में समस्याओं को हल करना था।
FryAmTheEggman

4
मैं जले पर थोड़ा ठंडा पानी लगाऊंगा।
मार्टिन एंडर

7

रेटिना , 102 100 93 88 बाइट्स

बाइट गिनती आईएसओ 8859-1 एन्कोडिंग मानती है।

$
!¶$`
m`(?<=^(\w+ )*)(?=_.*¶(?<-1>\w+ )*(\w+))
$2
(([a-z])+)(?<-2>_)*(_*)\3|!\D+
$3$1$3

स्ट्रिंग्स को एक लाइनफीड द्वारा अलग किया जाएगा। यदि अंडरस्कोर की एक विषम संख्या शेष है, तो बाहरी शब्द के बाद होगा।

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

व्याख्या

मुझे लगता है कि यह "डुप्लिकेट-एपेंड-लुकबैक-मैच-ऐड-सेंटर दृष्टिकोण" है, या कुछ करीबी ...

$
!¶$`

हम इनपुट को डुप्लिकेट करके शुरू करते हैं (एक !और एक लाइनफीड के साथ अलग )। इसका उद्देश्य यह है कि हम फिर अगली पंक्ति से शब्दों को लाकर दोनों रेखाओं को संसाधित कर सकते हैं (दूसरी पंक्ति का अलग से इलाज करने के बजाय)।

m`(?<=^(\w+ )*)(?=_.*¶(?<-1>\w+ )*(\w+))
$2

यह प्रत्येक अंतराल के लिए सही शब्द प्रस्तुत करता है। हम वर्तमान शब्द स्थिति को लुकबाइंड के साथ शुरू करते हैं (?<=^(\w+ )*)(स्थिति समूह की गहराई के रूप में संग्रहीत होती है 1)। तब अग्रदर्शी क) दर्शाता है कि हम मिलान द्वारा एक अंतर की शुरुआत में कर रहे हैं _तो साथ अगली पंक्ति में छोड़ देता है, .*¶के साथ शब्दों की सही संख्या से मेल खाता है (?<-1>\w+ )*सही स्थिति को पाने के लिए, और फिर शब्द से मेल खाता है वहाँ पाया साथ (\w+)में समूह 2

(([a-z])+)(?<-2>_)*(_*)\3|!\D+
$3$1$3

यह चरण तीन काम करता है:

  • यह प्रत्येक शब्द लंबाई के अनुरूप अंडरस्कोर हटाता है। यह शब्द की लंबाई के 2साथ समूह में गणना करके ([a-z])+और फिर उस कई अंडरस्कोर (जो कभी वापस नहीं लिखा जाता है) से मिलान करके किया जाता है ।
  • यह शेष अंडरस्कोर के आधे हिस्से को कैप्चर करके (_*)\3और $3$1$3वापस लिखकर इस शब्द को अंतर के केंद्र में ले जाता है।
  • यह डुप्लिकेट किए गए इनपुट को मिलान करके हटा देता है !\D+और इसे कुछ भी नहीं के साथ बदल देता है।

4

अजगर 2, 109

def f(a,b):exec"print' '.join([x,y][x<'`'].center(len(x),'_')for x,y in zip(a.split(),b.split()));a,b=b,a;"*2

फ़ंक्शन दो स्ट्रिंग्स को तर्क के रूप में लेता है और आउटपुट को उदाहरण के रूप में प्रिंट करता है। यह str.center(width, fillchar)ज्यादातर काम करने के साथ एक उबाऊ दृष्टिकोण का उपयोग करता है ।

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


1
मुझे नहीं लगता कि आपको ज़रूरत है z, जब तक मैं कुछ याद नहीं कर रहा हूँ आप प्रिंट और इनलाइन के बाद बस स्वैप कर सकते हैं z
FryAmTheEggman

@FryAmTheEggman हाँ, तुम सही हो। धन्यवाद :)
grc

2

रूबी, 111 109 अक्षर

->l{l.map(&:split).transpose.map{|c|c[m=c[0]<c[1]?0:1]=c[1-m].center c[m].size,?_
c}.transpose.map{|s|s*' '}}

इनपुट: 2 स्ट्रिंग्स की सरणी; आउटपुट: 2 स्ट्रिंग्स की सरणी।

नमूना रन:

2.1.5 :001 > puts ->l{l.map(&:split).transpose.map{|c|c[m=c[0]<c[1]?0:1]=c[1-m].center c[m].size,?_;c}.transpose.map{|s|s*' '}}[[
2.1.5 :002 >       'programming _____________ and code golf',
2.1.5 :003 >       'programming puzzles ______ code ____',
2.1.5 :004 >       ]]
programming ___puzzles___ and code golf
programming puzzles _and__ code golf

1

जावास्क्रिप्ट, 194 185 बाइट्स

f=(m,n)=>(m=m.split` `,n=n.split` `,G=(x,i,a)=>x[0]!='_'?x:(b=(a?n:m)[i],s=x.length-b.length,(k='_'.repeat(s/2))+b+k+(s%2?'_':'')),H=(e,y)=>e.map((x,i)=>G(x,i,y)).join` `,[H(m,1),H(n)])

दो स्ट्रिंग्स को पैरामीटर के रूप में लेता है और दो स्ट्रिंग्स को सरणी / सूची के रूप में आउटपुट करता है


1

गणितज्ञ 223

ऐसा करने के लिए एक छोटा तरीका होना चाहिए।

k=StringLength;m=StringSplit;
g=Partition[Riffle[m@#,m@#2],2]/.{{a_,a_}:> a<>" ",{a_,b_/; StringTake[b,1]=="_"}:> a<>" ",
{a_,b_}:>Table["_",Ceiling[z=(k@a-k@b)/2]]<>b<>""<>Table["_",Floor@z]<>" "}&;
s_~h~t_:={""<>g[s,t],""<>g[t,s]}

नमूना चला

h["programming _____________ and code golf", "programming puzzles ______ code ____"]

यहाँ छवि विवरण दर्ज करें


0

गेमा, 208 203 वर्ण

\B=@set{i;0}
<I>=@push{${v;f};$0}@incr{i}
\n=@set{v;s}@set{i;0}
 =
\E=@repeat{$i;@cmps{$f;$s;@set{f;@fill-center{$f;$s}};;@set{s;@fill-center{$s;$f}}}@set{F;$f ${F;}}@set{S;$s ${S;}}@pop{f}@pop{s}}$F\n$S

सिर्फ इसलिए कि इस कार्य के लिए Gema का पूर्ण कार्य है :।@fill-center{background;value}

इनपुट: 2 न्यूलाइन अलग लाइन (कोई अंतिम न्यूलाइन नहीं); आउटपुट: 2 न्यूलाइन अलग लाइनों (अनुगामी रिक्त स्थान के साथ - निषिद्ध नहीं लगता है)।

नमूना रन:

bash-4.3$ echo -ne 'programming _____________ and code golf\nprogramming puzzles ______ code ____' |
> gema '\B=@set{i;0};<I>=@push{${v;f};$0}@incr{i};\n=@set{v;s}@set{i;0}; =;\E=@repeat{$i;@cmps{$f;$s;@set{f;@fill-center{$f;$s}};;@set{s;@fill-center{$s;$f}}}@set{F;$f ${F;}}@set{S;$s ${S;}}@pop{f}@pop{s}}$F\n$S'
programming ___puzzles___ and code golf 
programming puzzles _and__ code golf 

0

सी, 197 बाइट्स

#define c(w,y)l=strspn(w,"_"),r=strcspn(y," "),memcpy(w+(l-r)/2,y,r),w+=l,y+=r;
main(l,v,w,y,r)char**v,*w,*y;{for(w=v[1],y=v[2];*w;w++,y++)if(*w^*y)if(*w^95)c(y,w)else c(w,y)puts(v[1]);puts(v[2]);}

उत्पादन

$ ./a.out "lorem _____ dolor _____ amet _______________ adipiscing elit mauris dapibus tincidunt _____________________________ accumsan fringilla proin vulputate viverra lorem fermentum dictum" "lorem ipsum ______ sit _______ consectetur _______________ elit mauris dapibus tincidunt metus accumsan fringilla proin vulputate viverra lorem ____________________________ dictum"
lorem ipsum dolor _sit_ amet __consectetur__ adipiscing elit mauris dapibus tincidunt ____________metus____________ accumsan fringilla proin vulputate viverra lorem fermentum dictum
lorem ipsum dolor_ sit _amet__ consectetur __adipiscing___ elit mauris dapibus tincidunt metus accumsan fringilla proin vulputate viverra lorem _________fermentum__________ dictum

0

ईएस 6, 122 बाइट्स

a=>a.map(s=>s.split` `).map((s,n,a)=>s.map((w,i)=>w<'a'?(l=w.length,t=w+a[n^1][i]+w,t.substr(t.length-l>>1,l)):w).join` `)

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

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