ওয়ার্ড চেঞ্জার রিচাবিলিটি


13

ওয়ার্ড চেঞ্জার এমন একটি গেম যেখানে আপনি প্রতিটি পদক্ষেপের নিজস্ব শব্দ হয়ে একক অক্ষর সম্পাদনার মাধ্যমে একটি শব্দকে অন্য একটিতে রূপান্তরিত করার চেষ্টা করছেন। এই চ্যালেঞ্জের জন্য, সম্পাদনাগুলি প্রতিস্থাপন, সন্নিবেশ বা মুছে ফেলা হতে পারে। উদাহরণস্বরূপ, WINNER OS LOSER এই রুট দিয়ে করা যেতে পারে (অন্য কেউ থাকতে পারে):

WINNER
DINNER
DINER
DINE
LINE
LONE
LOSE
LOSER

অন্যভাবে বাক্যাংশযুক্ত, আপনি অবশ্যই প্রতিবার 1 এর লেভেনস্টেইন দূরত্বে কেবল অন্য শব্দের মধ্য দিয়ে অন্য শব্দ থেকে একটি শব্দ পৌঁছাতে সক্ষম হবেন।

আইনসংগ্রহ

আপনাকে একটি শব্দের তালিকা এবং দুটি শব্দ দেওয়া হবে এবং কোনও রুট উপস্থিত থাকলে আপনাকে অবশ্যই একটি শব্দ থেকে অন্য শব্দের কাছে একটি বৈধ রুট আউটপুট দিতে হবে বা কোনও রুট না থাকলে আলাদা ধ্রুবক মান বা ধারাবাহিক আচরণ করতে হবে।

  • আপনি ধরে নিতে পারেন ইনপুট শব্দ দুটি শব্দ তালিকার মধ্যে রয়েছে
  • শব্দ তালিকাটি কোনও সুবিধাজনক ফ্ল্যাট বিন্যাসের মাধ্যমে নেওয়া যেতে পারে।
    • তালিকা, সেট, চেষ্টা, স্থান-পৃথক স্ট্রিং এবং লাইন-বিচ্ছিন্ন ফাইলগুলি সমস্ত বৈধ (উদাহরণস্বরূপ), তবে লেভেনস্টাইন সংলগ্ন একটি প্রাক-গণিত গ্রাফ নয়।
  • আউটপুট রুটে উভয় ইনপুট শব্দ অন্তর্ভুক্ত করা উচিত, তবে যা শুরু হয় এবং শেষ হয় তা বিবেচনা করে না।
  • যদি কোনও রুট না পাওয়া যায় তবে আপনি একটি নির্দিষ্ট ধ্রুবক, একটি মিথ্যা মান, খালি তালিকা আউটপুট করতে পারেন, একটি ব্যতিক্রম নিক্ষেপ করতে পারেন, ননজারো কোড সহ প্রস্থান করতে পারেন বা সীমাবদ্ধ সময়ে ঘটে যাওয়া অন্য কোনও আচরণ।
  • রুটটি সর্বোত্তম হওয়ার দরকার নেই এবং কোন রুটটি নেওয়া হবে তার কোনও প্রয়োজন নেই
  • গণনার জটিলতা কিছু যায় আসে না, তবে আপনার প্রোগ্রাম অবশ্যই একটি সীমাবদ্ধ পরিমাণে সমাপ্ত করার নিশ্চয়তা দিতে হবে। (এমনকি এটি মহাবিশ্বের উত্তাপের মৃত্যুর বাইরেও চলে যাবে)
  • আপনি ধরে নিতে পারেন যে সমস্ত শব্দ সম্পূর্ণভাবে একই ক্ষেত্রে বর্ণগুলি নিয়ে গঠিত

উদাহরণ পরীক্ষার ক্ষেত্রে

  • বিড়াল → ডিওজি; [বিড়াল, ডিওজি, সিওজি, সিওটি, ফ্রোগ, জিআরওজি, বিওজি]
    • বিড়াল, সিওটি, সিওজি, ডিওজি
  • বাথ; ঝরনা; [বাথ, শাওয়ার, হাট, হাট, ব্যাট, স্যাট, সাউড, সো, শো, হাউ]
    • কোনও রুট পাওয়া যায় নি
  • BREAK → ফিক্স; [BREAK, ফিক্স, বিট, ব্রিড, রিড, বিড, রেড, বিড, বিএডি, বিড, ফ্যাড, ফ্যাক্স]
    • BREAK, BREAD, BAD, BAD, FAD, FAX, FIX
  • বিল্ড → ধ্বংস; [বিল্ড, বিপর্যয়, বিল্ড, গিল্ট, গিল্ড, জিল্ড, গিল, বিল, দিল, ফিল, ডিস্ট্রাক্ট, স্ট্রাকচার, কাঠামো]
    • কোনও রুট পাওয়া যায় নি
  • কার্ড → বোর্ড; [কার্ড, বোর্ড, বার্ড]
    • কার্ড, বার্ড, বোর্ড
  • দান → অ্যাঞ্জেল; [ডেমোন, অ্যাঞ্জেল]
    • কোনও রুট পাওয়া যায় নি
  • শেষ → গত; [সর্বশেষ, অতীত, ব্লাস্ট, কাস্ট, কালো, ঘোস্ট, পোস্ট, বোস্ট]
    • শেষ, অতীত
  • অন্তর্ভুক্ত করুন → মোছা; এই শব্দ তালিকা
    • ইনসার্ট, ইনভার্ট, ইনভেন্ট, ইনবেন্ট, ইউনবেন্ট, ইউএনবিএনডি, ইউএনবিএনডি, আনঙ্কিড, আনঙ্কিং, ইনিংকিং, আইআরকিং, ডার্কিং, ডার্কিং, ডার্লিং, আর্লিং, এলিং, স্যারিং, সেরিং, সিরিয়ান, নেরিট, সিটি, সিয়ারেট মুছে ফেলা


1
আমরা বৈধ রুটের একটি তালিকা আউটপুট করতে পারি বা এটি একটি রুট হওয়া উচিত?
এমিগানা

@ এমিগানা যে কোনও রুটই করবে। যেমনটি আমি উল্লেখ করেছি "রুটটি সর্বোত্তম হওয়ার দরকার নেই"
গরুর মাংসের এস্ত্রি

আউটপুটে কি আমাদের শুরু এবং শেষ শব্দটি অন্তর্ভুক্ত করা দরকার? রুটগুলি সর্বদা শুরু হবে এবং শেষ হবে!
যাদু অক্টোপাস উরন

1
@ ম্যাজিক অ্যাক্টোপাস ইউরান "আউটপুট রুটে উভয়ই ইনপুট শব্দ অন্তর্ভুক্ত করা উচিত, তবে যা শুরু এবং শেষ হয় তাতে কিছু আসে যায় না।"
গরুর মাংসের মাংস

উত্তর:


5

05 এ বি 1 ই , 23 21 20 বাইট

বৈধ রুটের একটি তালিকা মুদ্রণ করে। কেভিন ক্রুইজসেনকে
2 বাইট সংরক্ষণ করা হয়েছে

怜€`ʒü.LP}ʒ¬²Qsθ³Q*

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


আপনি পরিবর্তন করে 2 বাইট সংরক্ষণ করতে পারবেন Dævyœ«}করার 怜€` । (কেন উভয় মানচিত্র পৃথকভাবে আলাদাভাবে কাজ æεœ`}করে তা নিশ্চিত নয় তবে
বিটিডব্লিউ

এটা খুব খারাপ, গুণফল []হল 1পরিবর্তে 0(খুব অবাক হওয়ার কিছু নেই, যদিও) অথবা যে একটি খালি তালিকা সঙ্গে একটি সমান চেক দৃশ্যত একটি খালি তালিকায় ফলাফল পরিবর্তে 0(এই আমি একটি বাগ হিসেবে দেখতে ..) .. অন্যথায় আপনি মিলিত হতে পারত আরেকটি বাইট সংরক্ষণ করতে ফিল্টার এবং সন্ধান_প্রথম:怜€`.Δü.LPy¬²Qsθ³QP
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন: ধন্যবাদ! কেন আমি ব্যবহারের কথা ভাবিনি তা নিশ্চিত নয় । আমি ভেক্টরাইজেশনের কারণে খালি তালিকায় সমান চেকের ফলাফল বলে মনে করি। খালি তালিকার জন্য একটি বিশেষ কেস থাকতে পারে, তবে অন্য ক্ষেত্রে এটি অপ্রত্যাশিত হতে পারে।
এমিগানা

1
17 এর জন্য এই কাজের মতো কিছু করে: এটি অনলাইনে চেষ্টা করুন!
যাদু অক্টোপাস উরন

1
@ ম্যাজিক অ্যাক্টোপাস ইউরন: দুর্ভাগ্যক্রমে, আমাদের পথের সমস্ত শব্দ আউটপুটে অন্তর্ভুক্ত করতে হবে।
এমিগানা

4

জাভাস্ক্রিপ্ট (ভি 8) ,  177  176 বাইট

হিসাবে ইনপুট লাগে (target)(source, list)। সমস্ত সম্ভাব্য রুট মুদ্রণ করে। অথবা কোনও সমাধান না থাকলে কিছুই মুদ্রণ করে না।

t=>F=(s,l,p=[],d)=>s==t?print(p):l.map((S,i)=>(g=(m,n)=>m*n?1+Math.min(g(m-1,n),g(m,--n),g(--m,n)-(S[m]==s[n])):m+n)(S.length,s.length)^d||F(S,L=[...l],[...p,L.splice(i,1)],1))

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

মন্তব্য

t =>                            // t = target string
F = (                           // F is a recursive function taking:
  s,                            //   s = source string
  l,                            //   l[] = list of words
  p = [],                       //   p[] = path
  d                             //   d = expected Levenshtein distance between s and the
) =>                            //       next word (initially undefined, so coerced to 0)
  s == t ?                      // if s is equal to t:
    print(p)                    //   stop recursion and print the path
  :                             // else:
    l.map((S, i) =>             //   for each word S at index i in l[]:
      ( g =                     //     g = recursive function computing the Levenshtein
        (m, n) =>               //         distance between S and s
        m * n ?                 //       if both m and n are not equal to 0:
          1 + Math.min(         //         add 1 to the result + the minimum of:
            g(m - 1, n),        //           g(m - 1, n)
            g(m, --n),          //           g(m, n - 1)
            g(--m, n) -         //           g(m - 1, n - 1), minus 1 if ...
            (S[m] == s[n])      //           ... S[m - 1] is equal to s[n - 1]
          )                     //         end of Math.min()
        :                       //       else:
          m + n                 //         return either m or n
      )(S.length, s.length)     //     initial call to g with m = S.length, n = s.length
      ^ d ||                    //     unless the distance is not equal to d,
      F(                        //     do a recursive call to F with:
        S,                      //       the new source string S
        L = [...l],             //       a copy L[] of l[]
        [...p, L.splice(i, 1)], //       the updated path (removes S from L[])
        1                       //       an expected distance of 1
      )                         //     end of recursive call
    )                           //   end of map()


3

পাইথন 2 , 155 বাইট

f=lambda a,b,W,r=[]:a==b and r+[a]or reduce(lambda q,w:q or any({a,a[:i]+a[i+1:]}&{w,w[:i]+w[i+1:]}for i in range(len(a+w)))and f(w,b,W-{a},r+[a]),W-{a},0)

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

ইনপুট হিসাবে দুটি শব্দ এবং শব্দের একটি সেট নেয়; স্ট্রিংগুলির তালিকা হিসাবে উপস্থিত থাকলে একটি (অপ-অনুকূল) রুট প্রদান করে, অন্যথায় মিথ্যা ফিরিয়ে দেয়।

এই খণ্ড:

any({a,a[:i]+a[i+1:]}&{w,w[:i]+w[i+1:]}for i in range(len(a+w)))

হয় Trueযদি এবং কেবল যদি a==wবা aএর Levenshtein দূরত্ব রয়েছে 1থেকে w



2

পাইথন 2 , 163 বাইট

যদি কোনও রুট পাওয়া যায়, তবে এটি স্টডারারের আউটপুট এবং প্রোগ্রামটি প্রস্থান কোড ১ দিয়ে প্রস্থান করে
If

s,e,d=input();r=[[s]]
for x in r:t=x[-1];t==e>exit(x);r+=[x+[w]for w in d-set(x)for a,b in(t,w),(w,t)for i in range(len(b)*2)if a==b[:i/2]+a[i/2:][:i%2]+b[i/2+1:]]

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



0

জেলি , 38 বাইট

⁵ḟ,€0ị$ṭ¹-Ƥ$€e€/ẸƊƇḢ€
Wṭ@ⱮÇßƊe@⁴oṆƲ?€Ẏ

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

একটি পূর্ণ প্রোগ্রাম তিনটি যুক্তি গ্রহণ করে। প্রথমটি হ'ল শুরুর শব্দ এবং সরবরাহ করা হয় [["START"]]। দ্বিতীয় যুক্তি হ'ল চূড়ান্ত শব্দ, হিসাবে সরবরাহ করা "END"। তৃতীয় আর্গুমেন্ট শব্দের তালিকা, উদ্ধৃত, কমা-বিচ্ছিন্ন শব্দ হিসাবে সরবরাহ করা।

প্রোগ্রামটি তালিকার একটি তালিকা প্রদান করে, প্রতিটি তালিকা শুরু থেকে শেষ অবধি বৈধ পথের প্রতিনিধিত্ব করে। যদি কোনও বৈধ রুট না থাকে তবে প্রতিক্রিয়াটি একটি খালি তালিকা।

টিআইও লিঙ্কে, ফাঁকা পৃথক পৃথক প্রতিটি শব্দ এবং শব্দের প্রতিটি তালিকা নিউলাইন দ্বারা পৃথক করে ফলাফলটি সুন্দরভাবে প্রদর্শন করার জন্য পাদদেশে পাঠ্য রয়েছে। যদি কোনও মুদ্রণ অন্তর্নিহিত তালিকার উপস্থাপনাটিকে অগ্রাধিকার দেওয়া হয় তবে এটি হিসাবে করা যেতে পারে ÇŒṘ

05 এআইবিআইই থেকে ভিন্ন, লেভেনস্টাইন দূরত্বের জন্য কোনও অন্তর্নির্মিত নেই, সুতরাং এই প্রোগ্রামটি একক অক্ষর অনুপস্থিতের সাথে আউটফিক্সের সাথে তুলনা করে, কিছুটা @ চ্যাসব্রাউনের সমাধানের মতো , যদিও জেলি টুইস্টের সাথে।

ব্যাখ্যা

সহায়ক লিঙ্ক: মোনাডিক লিঙ্ক যা শব্দের একটি তালিকা গ্রহণ করে এবং সম্ভাব্য বর্ধিত তালিকার একটি তালিকা, বা আর কোনও এক্সটেনশন সম্ভব না হলে একটি খালি তালিকা ফেরত দেয়

⁵ḟ                      | Filter the word list to remove words already used
  ,€0ị$                 | Pair each word with the last word in the current path
                  ƊƇ    | Filter these pairs such that
              e€/Ẹ      |   there exists any
       ṭ¹-Ƥ$€           |   match between the original words or any outfix with a single character removed
                    Ḣ€  | Take the first word of each of these pairs (i.e. the possible extensions of the route)

প্রধান লিঙ্ক

              €         | For each of the current paths
            Ʋ?          | If:
       e@⁴              |   The path contains the end word
          oṆ            |   Or the path is empty (i.e. could not be extended)
W                       | Return the path wrapped in a list (which will be stripped by the final Ẏ)
 ṭ@ⱮÇ                   | Otherwise, look for possible extensions using the helper link, and add onto the end of the path
     ßƊ                 | And then feed all of these paths back through this link
               Ẏ        | Strip back one layer of lists (needed because each recursion nests the path one list deeper)

0

সুইফট 4.2 / এক্সকোড 10.2.1 , 387 বাইট

func d(l:String,m:String)->Bool{return (0..<l.count).contains{var c=l;c.remove(at:c.index(c.startIndex,offsetBy:$0));return c==m}};func f(r:[String])->[String]{if b==r.last!{return r};return w.lazy.map{!r.contains($0)&&(d(l:r.last!,m:$0)||d(l:$0,m:r.last!)||(r.last!.count==$0.count&&zip(r.last!,$0).filter{$0 != $1}.count==1)) ? f(r:r+[$0]):[]}.first{!$0.isEmpty} ?? []};return f(r:[a])

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

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