শব্দ শৃঙ্খলা খেলুন


15

যখন আমি ছোট ছিলাম, আমি ওয়ার্ড চেইন নামে একটি শব্দ গেম খেলতাম । এটা খুব সহজ ছিল। প্রথম প্লেয়ার একটি শব্দ চয়ন করে; পরের খেলোয়াড় আরেকটি শব্দ বলেছেন যা একই অক্ষর দিয়ে শুরু হয় আগের শব্দটি দিয়ে শেষ হয়েছিল। কেউ চূড়ান্ত না হওয়া পর্যন্ত এটি চিরকাল চলে! ট্রিকটি হ'ল, আপনি একই শব্দটি দু'বার ব্যবহার করতে পারবেন না (যদি না সকলে সেই শব্দটি ব্যবহার না করে তবে!)। এটি আরও শক্ত করার জন্য সাধারণত আমরা একটি নির্দিষ্ট বিষয় নিয়ে খেলি। তবে এখন, আমি চাই আপনি আমার জন্য এটি করার জন্য একটি প্রোগ্রাম তৈরি করুন।

চ্যালেঞ্জ

প্রদত্ত শব্দের একটি সেট এবং শব্দের শুরু করে শব্দ ব্যবহার করে দীর্ঘতম সম্ভাব্য সমস্ত শৃঙ্খলা খুঁজে পেতে একটি সম্পূর্ণ প্রোগ্রাম বা ফাংশন লিখুন।

এটি , তাই সংক্ষিপ্ততম কোডটি জয়ী!

ইনপুট

দুটি ইনপুট রয়েছে: একটি তালিকা এবং একটি শুরুর শব্দ। শুরুর শব্দটি তালিকায় থাকবে না। ইনপুটগুলি সমস্ত ছোট হাতের ASCII, এবং তালিকায় সদৃশ শব্দ থাকবে না।

আউটপুট

তালিকা থেকে শব্দের সমস্ত ক্রম যেমন:

  • শুরুর শব্দটি ক্রমের প্রথম শব্দ is

  • প্রতিটি পরবর্তী শব্দ পূর্ববর্তী শব্দের শেষ অক্ষরের মতো একই বর্ণ দিয়ে শুরু হয়।

  • ক্রমের দৈর্ঘ্য দীর্ঘতম সম্ভব

যদি একাধিক দীর্ঘতম সিকোয়েন্স থাকে তবে সেগুলি সমস্ত আউটপুট করুন।

ক্রমটি তালিকার সমস্ত শব্দ যুক্ত করার প্রয়োজন হয় না। কখনও কখনও এটি সম্ভব হয় না (টেস্টকেসগুলি দেখুন)। আবার কোনও শব্দ দু'বার ব্যবহার করা যায় না!

Testcases

In: [hello, turtle, eat, cat, people] artistic
Out:  [artistic, cat, turtle, eat]
In: [lemonade, meatball, egg, grape] ham 
Out: [ham, meatball, lemonade, egg, grape]
In: [cat, cute, ewok] attic
Out: [attic, cute, ewok]
In:[cat, cute, ewok, kilo, to, otter] attic
Out: [attic, cute, ewok, kilo, otter]
In:[cat, today, yoda, attic] ferret
Out: [ferret, today, yoda, attic, cat]
In: [cancel, loitering, gnocchi, improv, vivic, child, despair, rat, tragic, chimney, rex, xylophone] attic
Out: [[attic, child, despair, rat, tragic, cancel, loitering, gnocchi, improv, vivic, chimney], [attic, cancel, loitering, gnocchi, improv, vivic, child, despair, ra', tragic, chimney]]
In: [cat, today, yoda, artistic, cute, ewok, kilo, to, otter] attic
Out: [attic, cat, today, yoda, artistic, cute, ewok, kilo, otter]

4
@ ডাউনভোটার্স আপনি কি দয়া করে ব্যাখ্যা করতে পারেন যে আমি কীভাবে আমার প্রশ্নের উন্নতি করতে পারি?
তানমাথ

@ ব্যবহারকারী81655 নিশ্চিত
তানমাথ

2
আপনি একাধিক আউটপুট সিকোয়েন্স সহ একটি পরীক্ষা কেস যুক্ত করতে পারেন?
isaacg

@ আইস্যাকগ শিওর! এটিতে কাজ করছে
তানমাথ

@isaacg যোগ হয়েছে! (15 টি চরিত্রের সীমা পরিপূর্ণ ...)
তানমাথ

উত্তর:


8

পাইথ, 25 23 বাইট

.MlZfqhMtTeMPT+Lzs.pMyQ

পরীক্ষা স্যুট

একটি নিষ্ঠুর শক্তি সমাধান। বৃহত্তর পরীক্ষার ক্ষেত্রে কিছুটা ধীরে ধীরে।

ফর্ম ইনপুট:

attic
["cat", "today", "yoda", "to", "otter"] 

আকারে আউটপুট:

[['attic', 'cat', 'today', 'yoda'], ['attic', 'cat', 'to', 'otter']]

ব্যাখ্যা:

.MlZfqhMtTeMPT+Lzs.pMyQ
                           Q = eval(input()) (The list of words)
                           z = input()       (The starting word)
                     yQ    All subsets of the input.
                  .pM      All permutations of the subsets.
                 s         Flatten.
              +Lz          Add the starting word to the front of each list.
                           This is all possible sequences.
    f                      Filter on
     q                     The equality of
      hMtT                 The first character of each word but the first
          eMPT             The last character of each word but the last
.MlZ                       Take only the lists of maximal length.

2
আপনি একটি ব্যাখ্যা যোগ করতে পারেন?
তানমাথ

আপনার কোড একাধিক আউটপুট ক্রম উদাহরণস্বরূপ চিরকাল রান
TanMath

3
@ ট্যানম্যাথ নেই এটি কেবলমাত্র সময়স্বরূপ, তাই এটি খুব ধীর।
ইসাকাক

5
কোড গল্ফ: অন্য কয়েকটি দ্রুত প্রোগ্রাম তৈরির শিল্পটি কেবলমাত্র কয়েকটি বাইট সংরক্ষণের জন্য তাত্পর্যপূর্ণ সময়ে চালানো: পি
আর্কটরাস

1
@ রিকারডাব্লু আমি মনে করি মার্টিনের "কোড রিভিউ: কোডটি কিছুটা কম ভুল করা / কোড গল্ফ: কোডটি কিছুটা কম দীর্ঘ করা" এখানে চ্যাট থেকে মন্তব্য করাও মূল্যবান বলে মনে করি।
আর্কটরাস

4

জাভাস্ক্রিপ্ট (ES6), 164 বাইট

f=(l,s,r=[[]])=>l.map((w,i)=>w[0]==s.slice(-1)&&(x=l.slice(),x.splice(i,1),o=f(x,w),a=o[0].length,b=r[0].length,r=a>b?o:a<b?r:r.concat(o)))&&r.map(q=>[s].concat(q))

ব্যাখ্যা

একটি পুনরাবৃত্ত ক্রিয়াকলাপ যা সমস্ত সম্ভাব্য নির্বাচনের জন্য আউটপুট তালিকা কতক্ষণ তা পরীক্ষা করে che

শব্দের অ্যারেগুলির একটি অ্যারে প্রদান করে।

f=(l,s,r=[[]])=>            // l = list, s = starting word, r is not passed (it is
                            //     here so that it is not defined globally)
  l.map((w,i)=>             // for each word w at index i
    w[0]==s.slice(-1)&&(    // if the first letter is the same as the last letter:
      x=l.slice(),          // x = clone of the list of words
      x.splice(i,1),        // remove the current word
      o=f(x,w),             // get the list of words starting from the current word
      a=o[0].length,
      b=r[0].length,
      r=a>b?o:              // if o is longer, set r to o
        a<b?r:              // if o is shorter, keep r
        r.concat(o)         // if o is same, add it to r
    )
  )
  &&r.map(q=>[s].concat(q)) // return a list of longest lists with the starting word

পরীক্ষা

ডিফল্ট প্যারামিটারটিকে আরও ক্রস ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ করতে পরীক্ষায় ব্যবহৃত হয় না।


আমি মনে করি আপনি বিচ্ছিন্নতার o[r.length]?পরিবর্তে এবং পরিবর্তে পপ ব্যবহার করতে পারেন o.length>r.length?
জিআরসি

@ জিআরসি ধন্যবাদ, আমি সত্যিই o[r.length]টিপটি পছন্দ করি ! আমি জানি না popযদিও আমি কীভাবে ব্যবহার করতে পারি ।
ব্যবহারকারী81655

আহ এনভিএম - আমি ভেবেছিলাম যে পপ সূচকটিকে পাইথনের মতো প্রথম যুক্তি হিসাবে গ্রহণ করতে পারে।
grc

এই সমাধান একাধিক আউটপুট ক্রম জন্য অবৈধ
TanMath

@ ট্যানম্যাথ ফিক্সড, যদিও এটি পরীক্ষার একটি কেস ভেঙে দেয়।
ব্যবহারকারী81655


1

পার্ল 5, 275 বাইট

সম্ভবত এটি যতটা গল্ফ করা যায় না, তবে, আরে, এটি যাই হোক না কেন, তাই না?

use List::Util max;use List::MoreUtils uniq,before;use Algorithm::Permute permute;$i=pop;permute{push@c,[@ARGV]}@ARGV;for$c(@c){unshift@$c,$i;push @{$d{before{(substr$c->[$_],-1)ne(substr$c->[1+$_],0,1)}keys$c}},$c}for$m(max keys%d){say for uniq map{"@$_[0..$m+1]"}@{$d{$m}}}

এটি এইভাবে ব্যবহার করুন:

$ perl -M5.010 chain.pl cat tin cot arc
arc cat tin
arc cot tin

সতর্কবাণী! দীর্ঘ তালিকাতে এই স্ক্রিপ্টটির ব্যবহারের জন্য প্রচুর স্মৃতি দরকার! এটি সাতটি (ছয়টি অতিরিক্ত অতিরিক্ত এক) এ আমার পক্ষে দুর্দান্ত কাজ করেছে তবে তেরে নয় (বারোটি প্লাস ওয়ান)।

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


0

সি, 373 বাইট

g(char*y){printf("%s, ",y);}z(char*w){int i,k=-1,v=0,j=sizeof(c)/sizeof(c[0]);int m[j],b=0;for(i=0;i<j;i++){m[v++]=c[i][0]==w[strlen(w)-1]?2:1;if(u[i]==6)m[v-1]=1;if(strcmp(w,c[i]))k=i;}printf("%s",w);for(i=0;i<j;i++){if(m[i]!=1){if(v+i!=j){g(s);for(;b<j;b++){if(u[b]==6)g(c[b]);}}else printf(", ");u[i]=6;z(c[i]);u[i]=1;}else v+=-1;}if(k!=-1)u[k]=1;if(v==0)printf(" ; ");}

আমি বিশ্বাস করি এখানে আরও অনেক গল্ফিং থাকতে পারে তাই আমি সম্ভবত এটি আপডেট করব।

ডি-গলফ

char *c[9]={"cat","today","yoda","artistic","cute","ewok","kilo","to","otter"};
u[9]={-1};
char *s="attic";

g(char*y){printf("%s, ",y);}
z(char*w){
   int i,k=-1,v=0,j=sizeof(c)/sizeof(c[0]);
   int m[j],b=0;
   for(i=0;i<j;i++){
      m[v++]=c[i][0]==w[strlen(w)-1]?i:-1;
      if(u[i]==6)m[v-1]=-1;
      if(strcmp(w,c[i]))k=i;
   }
   printf("%s",w);
   for(i=0;i<j;i++){
      if(m[i]!=-1){
         if(v+i!=j){
            g(s);
            for(;b<j;b++){
                if(u[b]==6)g(c[b]);
             }
         }else printf(", ");
         u[i]=6;
         z(c[i]);
         u[i]=-1;
      } else v+=-1;
   }
   if(k!=-1)u[k]=-1;
   if(v==0)printf(" ; ");
}

main(){
   z(s);
   printf("\n");
   return 0;
}

আদর্শ লিঙ্ক - যদি আমি এটি সঠিকভাবে না করি তবে আমাকে জানান: ডি


আপনি কি পরীক্ষার জন্য একটি আদর্শ লিঙ্ক যুক্ত করতে পারেন ?
তানমাথ

হ্যাঁ আমি এটি দিয়ে আমার উত্তরটি আপডেট করব
@

লিঙ্কটিতে গল্ফযুক্ত কোড থাকা উচিত, উগল্ফড সংস্করণ নয়। এইভাবে, আমরা চ্যালেঞ্জের কাজগুলির জন্য আপনি জমা দিচ্ছেন এমন গল্ফযুক্ত সংস্করণটি নিশ্চিত করতে পারি।
তানমাথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.