দুটি স্ট্রিং মার্জ করা হচ্ছে


18

ভূমিকা

চলুন যাক যে এস 1 = a...bএবং এস 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...
আদনান

আমরা কি স্ট্রিংয়ের পরিবর্তে অক্ষরের একটি তালিকা আউটপুট করতে পারি?
ডেনকার

@ ডেনারএফে না, দুঃখিত
আদনান

স্ট্রিংগুলি কি বিপরীত ক্রমে নেওয়া যেতে পারে?
মেগো

উত্তর:


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! আপনি জেলিকেও দত্তক নিতে পারবেন না! গল্ফিং মাস্টার হিসাবে আমাদের সমস্ত মোড রেখে দেওয়া হবে।
আর

@ রিকারউ হা হা, কেন আপনি ভাবেন যে তারা মোড? কারণ তারা গল্ফে ভাল রয়েছে: পি
বিড়াল

3
@ রিকারডাব্লু আমাকে জেলির কাছে নিজের সমাধানটি পোর্ট করে আমাকে মারতে মারতে অন্য কাউকে আগেই অভিহিত করতে হয়েছিল। ¯ \ _ (ツ) _ / ¯
মার্টিন এন্ডার

15

সিজেম, 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

জাভাস্ক্রিপ্ট ES6, 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

@ দেব-নাল, স্থির
কিউয়ের্তি




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."

কিভাবে এটা কাজ করে:

  • উভয় তালিকা যদি খালি না থাকে তবে ২ য় তালিকার শীর্ষস্থানীয় হলে প্রথম তালিকার "."শীর্ষটি বাছুন, অন্যথায় দ্বিতীয় তালিকার শীর্ষস্থানীয় বাছুন। তালিকাগুলির লেজগুলির সাথে একটি পুনরাবৃত্ত কল যোগ করুন।

  • যদি কমপক্ষে একটি তালিকা খালি থাকে তবে দুটি তালিকা যুক্ত করুন।

সম্পাদনা করুন: @ লিন একটি বাইট সংরক্ষণ করেছেন। ধন্যবাদ!


"আপনি ধরে নিতে পারেন যে ইনপুটটিতে কেবলমাত্র পিরিয়ড এবং ছোট হাতের অক্ষর রয়েছে" তাই আপনি 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ডান প্যাডযুক্ত ইনপুটগুলি এবং প্রতিটি জোড়ার ন্যূনতম (ASCII কোড দ্বারা সংজ্ঞায়িত) পরীক্ষা করি check যদি এটি হয় তবে .আমরা যে অক্ষরটির বৃহত্তর কোড রয়েছে তা ব্যবহার করি, অন্যথায় আমরা দ্বিতীয় ইনপুট থেকে যে কোনওটিই ব্যবহার করি। ফলস্বরূপ অ্যারেটি joinএকটি স্ট্রিংয়ে এড হয়ে ফিরে আসে।



1

রেটিনা , 55

$

+ `(।? (\ এস *) (\ ডাব্লু) | (\ এস) (\ এস *)।?) (\ এস *। *)
$ 2 $ 5 $ 6 $ 3 $ 4


লাইন 5 একটি একক স্থান। লাইন 6 হ'ল একটি খালি লাইন (কোনও পেছনের নিউলাইন নেই)।

এটি অনলাইনে চেষ্টা করুন।

আমি এটি GNU সেডে শুরু করেছি, (-r বিকল্পের সাহায্যে)। সোজা সোজা বন্দর রেটিনার কাছে একবার আমি রেজিক্সগুলি বের করে ফেললাম। সেড সংস্করণটি হ'ল:

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,$.

বাহ একটি সংক্ষিপ্ত সমাধান খুঁজে পাচ্ছেন না। (@ কিওয়ার্তির জাভাস্ক্রিপ্টের উত্তর হিসাবে একই পদ্ধতি)।
প্রয়োজন -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

q / kdb +, 43 40 বাইট

সমাধান:

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

দ্রষ্টব্য: আমি সুবিধার সুযোগ গ্রহণ করছি "প্রদত্ত দুই খালি নয় এমন স্ট্রিং " এবং অভিমানী যে ইনপুট স্ট্রিং হয়। কেডিবিতে "c"একটি পরমাণু, (),"c"একটি স্ট্রিং, অন্যথায় স্কোরটিতে 6 বাইট যুক্ত করা দরকার, কারণ আমরা $কোনও পরমাণুকে প্যাড করতে পারি না ...

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