পারস্পরিকভাবে শূন্যস্থান পূরণ করুন


11

অনুরূপ শব্দের প্রতিনিধিত্ব করে আন্ডারস্কোরের ক্রমগুলির সাথে দুটি স্ট্রিংয়ের একটি ইনপুট দেওয়া হয়েছে, "ফাঁকা" ভরাট দিয়ে বাক্যগুলি আউটপুট দিন।

এই চ্যালেঞ্জটি বর্ণনা করার সর্বোত্তম উপায় উদাহরণ হিসাবে। এখানে একটি উদাহরণ ইনপুট:

programming _____________ and code golf
programming puzzles ______ code ____

এবং এখানে সম্পর্কিত আউটপুট:

programming ___puzzles___ and code golf
programming puzzles _and__ code golf

এই চ্যালেঞ্জের উদ্দেশ্যে, একটি "শব্দ" এক বা একাধিক ছোট অক্ষরের অনুক্রম হিসাবে সংজ্ঞায়িত করা হয় এবং একটি "ফাঁকা" এক বা একাধিক আন্ডারস্কোর হিসাবে সংজ্ঞায়িত করা হয় (ইনপুটটিতে সর্বদা কেবল ছোট হাতের অক্ষর, স্পেস এবং আন্ডারস্কোর থাকবে) । ইনপুট স্ট্রিংয়ের শব্দ এবং শূন্যস্থানগুলি একক স্পেস দ্বারা পৃথক করা হয়, এবং বাক্যে শব্দের সংখ্যা এবং ফাঁকা সংখ্যাগুলির যোগফল সর্বদা সমান হবে।

চ্যালেঞ্জের উদ্দেশ্য হ'ল সমস্ত শূন্যস্থানটি সঠিক শব্দের সাথে পূরণ করা , যা স্পেস দিয়ে বিভক্ত হয়ে যায় এমন শব্দগুলি যা অন্য স্ট্রিংয়ে একই সূচককে দখল করে।

  • উপরের উদাহরণে "ধাঁধা" শব্দের সাথে যেমন শব্দটি দেখানো হয়েছে তেমনই ফাঁকা জায়গায় কেন্দ্রীভূত থাকতে হবে - সমান সংখ্যক আন্ডারস্কোর উভয় পাশে থাকবে।

  • শব্দটি যদি ঠিক কেন্দ্রীভূত না করা যায় তবে অতিরিক্ত আন্ডারস্কোরটি বাম বা ডানদিকে যেতে পারে (উদাহরণস্বরূপ শব্দটি "এবং" উপরের উদাহরণে)।

  • শব্দটি ফিট করার জন্য সর্বদা পর্যাপ্ত আন্ডারস্কোর থাকবে তবে শব্দের দৈর্ঘ্য (উদাহরণস্বরূপ, উপরের উদাহরণে "গল্ফ" শব্দটি) এর যথাযথ পরিমাণে থাকতে পারে।

  • উভয় স্ট্রিংয়ে একই পজিশনে কখনই ফাঁকা থাকবে না।

ইনপুট / আউটপুট নিম্নলিখিত যে কোনও হতে পারে (ইনপুট / আউটপুট অগত্যা একই পদ্ধতিতে হবে না):

  • বর্ণমালা, স্থান বা আন্ডারস্কোর নয় এমন কোনও অক্ষর দ্বারা পৃথক একক স্ট্রিং (উদাঃ নিউলাইন বা কমা দ্বারা পৃথক স্ট্রিং)

  • একটি অ্যারে / তালিকা / ইত্যাদি। দুটি স্ট্রিং এর

  • দুটি ফাংশন / কমান্ড লাইন আর্গুমেন্ট (কেবল ইনপুট)

যেহেতু এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে।

উপরের উদাহরণটি পরীক্ষার কেস হিসাবে ব্যবহার করা যেতে পারে। এখানে একটি বৃহত্তর পরীক্ষার কেস রয়েছে (বিভিন্ন কেন্দ্রিক আচরণের কারণে আউটপুটে দ্বিতীয় স্ট্রিং কিছুটা পৃথক হতে পারে):

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

চমৎকার দ্বিপদ চ্যালেঞ্জ।
আর

উত্তর:


5

পাইথ, 30

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
আমি বার্নে কিছু ঠান্ডা জল লাগাব apply
মার্টিন এন্ডার

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)। তারপর lookahead ক) নিশ্চিত করে যে আমরা ম্যাচিং দ্বারা একটা ফাঁক শুরুতে করছি _তারপর পরবর্তী লাইনে অগ্রাহ্য, .*¶সঙ্গে শব্দের সঠিক সংখ্যার সাথে মেলে (?<-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

@ ফ্রাইআমডিজম্যান হ্যাঁ, আপনি ঠিক বলেছেন right ধন্যবাদ :)
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 টি অক্ষর

\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

ES6, 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` `)

একক প্যারামিটার হিসাবে দুটি স্ট্রিংয়ের অ্যারে নেয় এবং দুটি স্ট্রিংয়ের আরেকটি অ্যারে প্রদান করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.