লেভেনস্টাইন দূরত্বের প্রতিটি পদক্ষেপ


18

এই চ্যালেঞ্জটিতে আপনি এমন একটি প্রোগ্রাম লিখবেন যা ইনপুট হিসাবে (এসটিডিএন বা নিকটতম) দুটি নিউলাইন-বিচ্ছিন্ন স্ট্রিং, এস 1 (প্রথম লাইন) এবং এস 2 (দ্বিতীয় লাইন) নেবে write আপনি ধরে নিতে পারেন যে এস 1 এর দৈর্ঘ্য সর্বদা 30 এর চেয়ে ছোট এবং এস 2 এর দৈর্ঘ্যের চেয়ে বড় হবে। প্রোগ্রামটি তখন s1 থেকে s2 এর লেভেনস্টাইন দূরত্বের প্রতিটি পদক্ষেপকে আউটপুট করে।

লেভেনস্টেইন দূরত্বের প্রতিটি ধাপের অর্থ কী তা বোঝাতে, প্রোগ্রামটি এন স্ট্রিং প্রিন্ট করবে, যেখানে এন এস 1 এবং এস 2 এর মধ্যে লেভেনস্টাইন দূরত্ব এবং দুটি সংলগ্ন স্ট্রিংয়ের মধ্যবর্তী লেভেনস্টাইন দূরত্ব সর্বদা এক হবে। অর্ডার কিছু যায় আসে না। আউটপুটটি নতুন লাইন দ্বারা পৃথক হওয়া উচিত এবং এস 1 অন্তর্ভুক্ত নয়, কেবল ইন-বিটওয়েইন এবং এস 2। প্রোগ্রামটি একটি আধুনিক কম্পিউটারে এক মিনিটেরও কম সময়ে চলতে হবে।

উদাহরণ:

ইনপুট:

Programming
Codegolf

আউটপুট:

rogramming
Cogramming
Coramming
Coamming
Codmming
Codeming
Codeging
Codegong
Codegolg
Codegolf

ইনপুট:

Questions
Answers

আউটপুট:

uestions
Aestions
Anstions
Ansions
Answons
Answens
Answers

ইনপুট:

Offline
Online

আউটপুট:

Ofline
Online

ইনপুট:

Saturday
Sunday

আউটপুট:

Sturday
Surday
Sunday

এখানে একটি অজগর স্ক্রিপ্টের লিঙ্ক রয়েছে যা দূরত্ব এবং পদক্ষেপগুলি মুদ্রণ করে।

অতিরিক্ত নিয়ম:

এটি কোড-গল্ফ তাই আপনার কোডটি সংক্ষিপ্ত রাখুন; সংক্ষিপ্ততম কোড জয়!


1
আমার সম্পাদনার জন্য, আমি বরং অনুমান করেছি যে ইনপুটটি ফর্মের হবে s1(newline)s2, তবে, আবার প্রশ্নটি দেখে, আমি ভাবছি যে পরিবর্তে আপনি যদি প্রোগ্রামটির জন্য 2 ইনপুটযুক্ত স্ট্রিংয়ের দৈর্ঘ্যের উপর ভিত্তি করে এস 1 এবং এস 2 নির্বাচন করার পরিকল্পনা করেছিলেন তবে? উভয় ক্রমে, আপনি এই বিষয়টি স্পষ্ট মনে করতে হবে? এটিই কি আমরা ধরে নিই যে ইনপুটটি এস 2 এর পরে এস 2 হবে, বা আমরা দুটি ইনপুটগুলির দৈর্ঘ্যের ভিত্তিতে এস 1 এবং এস 2 নির্বাচন করব?
ভিজ্যুমেলন

একটি উত্তর কি যুক্তিসঙ্গত সময়ে চালাতে হবে?
কেএসব

ক্যাম্পার - অ্যাম্পিয়ার, দূরত্ব 2, অজগর স্ক্রিপ্ট চিরকাল চলে ...
edc65

"STDIN বা নিকটতম থেকে ইনপুট নেওয়া" কতটা কঠোর? আমি কি এমন কোনও ফাংশন লিখতে পারি যা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নেয়? বর্তমানে গৃহীত উত্তর তাই করে।
নিমি

উত্তর:


4

জাভাস্ক্রীপ্ট, 167 161 154 বাইট

function l(a,b,d){if(a!=b){if(a[l="length"]>b[l])a=a[s="slice"](1),d=-1;else if(a[d]!=b[d])a=a[s](0,d)+b[d]+a[s](d+1);document.write(a+"<p>");l(a,b,++d)}}

সাথে কল l("Programming","golf")

Codepen

ডিগল্ফড (এবং টীকাযুক্ত) কোড (পুরানো তবে আপনি ধারণাটি পেয়েছেন):

function l(a, b, d) {
  s = "substring"; //saving this to a string lets us call it with a[s] later
  if (a != b) { //if the strings aren't the same, continue
    if (a.length > b.length) { //if a is still greater than b we can delete characters
      a = a[s](1); //delete the first character from a
      d = -1 //when we start swapping characters, we'll need d to start at 0
    } else if (a[d] != b[d]) { //if the d'th character isn't the same, we can swap them
      a = a[s](0, d) + b[d] + a[s](d + 1) //swap the d'th character of b into a
    }
    document.write(a + "<p>"); //the first call to document.write overwrites the page but successive calls append the output 
    l(a, b, ++d) //increment d and recurse
  }
}

ফাংশন l (a, b, d) {s = "sice"; if (a! = b) {if (a.leth> b.length) a = a [s] (1), d = -1; অন্য যদি (! একটি [ঘ] = খ [ঘ]) একটি = একটি [গুলি] (0, ঘ) + খ [ঘ] একটি [গুলি] (ঘ + 1 টি); document.write (একটি + "<p> যে" ); l (a, b, ++ d)}}
ডাঃ ব্যথা

@ নিমিমি: আপনি যদি এটি দুটি যুক্তি (যেমন l ("প্রোগ্রামিং", "কোডগল্ফ")) দিয়ে কল করেন তবে এটি একই কাজ করে, তাই আমি মনে করি আপনার বক্তব্যটি বাতিল is
9999 ইয়ার্স

এছাড়াও, প্রকাশক sভিতরে a=a[s](1)যেমন a=a[s="slice"](1)কিছু বাইট পরিমাণ সঞ্চয় হয়।
মামা ফান রোল

1
কোডেপেনের লিঙ্ক অনুসারে, আপনার প্রোগ্রামটি "Programming"-> এর জন্য 11 টি পদক্ষেপ আউটপুট করে "Codegolf"তবে 10 হওয়া উচিত
নিমিম

10

হাস্কেল, 201 194 বাইট

l=length
g[]n u=map(\_->"")n
g(b:c)[]u=(u++c):g c[]u
g(b:c)n@(o:p)u|b==o=g c p(u++[o])|1<2=((u++o:c):g c p(u++[o]))!((u++c):g c n u)
a!b|l a<l b=a|1<2=b
p[a,n]=g a n""
f=interact$unlines.p.lines

প্রত্যাশার চেয়ে দীর্ঘ আমি এটাকে কিছুটা নিচে নামাতে পারি ...

ব্যবহারের উদাহরণ:

*Main> f                     -- call via f
Questions                    -- User input
Answers                      -- no newline after second line!
uestions                     -- Output starts here
Aestions
Anstions
Ansions
Answons
Answens
Answers

এটি একটি নিষ্ঠুর শক্তি যা প্রাথমিক অক্ষরগুলি পৃথক করে যদি পরিবর্তন এবং মুছে ফেলার মধ্যে সিদ্ধান্ত নেয়।


এটি চালাতে কতক্ষণ সময় লাগে?
লুভজো

আমি কীভাবে পরীক্ষা করতে পারি (সম্ভবত আদর্শ)?
edc65

@ লভজো: আপনার উদাহরণগুলির মতো ছোট স্ট্রিংগুলি তাত্ক্ষণিকভাবে গণনা করা হয়, সবচেয়ে খারাপ পরিস্থিতি প্রায় 1: 30 মিনিট। আমি "হ্যাড" ইন "এক মিনিটের মধ্যে চলতে হবে" এর ব্যাখ্যা দিয়েছি "কঠোর সীমা হিসাবে নয় (অবশ্যই বনাম আবশ্যক)"। যদি এটি আবশ্যক হয় তবে আমি প্রায় 20 বাইটের জন্য একটি "পারফরম্যান্স প্যাক" যুক্ত করতে পারি।
নিমি

@ এডসি 65: হ্যাঁ, আদর্শ, তবে এটি প্রত্যাশা করে যে ফাংশনটি "প্রধান" বলা হবে। চেষ্টা করুন: ideone.com/CUgU8W
নিমি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.