সাবস্ট্রিং দিয়ে স্ট্রিং তৈরি করা যায় কিনা পরীক্ষা করুন!


23

একটি স্ট্রিং sএবং একটি অ্যারে / তালিকা দেওয়া l, sঅংশগুলি দিয়ে তৈরি করা যায় কিনা তা নির্ধারণ করুন l

উদাহরণস্বরূপ, যদি স্ট্রিংটি হয় "Hello, world!"এবং তালিকাটি হয় [' world!', 'Hello,']তবে প্রোগ্রাম / ফাংশনটি সত্যবাদী মানটি ফিরিয়ে আনবে, কারণ আপনি স্ট্রিংটি গঠনের জন্য তালিকাটি সাজিয়ে নিতে পারেন। নিম্নলিখিত তালিকা একটি truthy মান হবে: ['l', 'He', 'o, wor', 'd!']'l'তার স্ট্রিংয়ের যেখানে এটি প্রয়োজন তা পূরণ করার কল্পনা করুন । হ্যাঁ, আপনি স্ট্রিং গঠনের জন্য তালিকার উপাদানগুলি পুনরাবৃত্তি করতে পারেন। যদি এটি স্ট্রিং গঠন করতে না পারে তবে এটি একটি মিথ্যা মানটি ফিরিয়ে আনবে। আইও এর স্ট্যান্ডার্ড পদ্ধতিগুলি, স্ট্যান্ডার্ড লুফোলগুলি প্রয়োগ হয়।

পরীক্ষার কেস:

Input (In the form of s, l)
Output (1 if possible, 0 if impossible)

"Hello, world!", ["l", "He", "o, wor", "d!"]
1

"la lal al ", ["la", " l", "al "]
1

"this is a string", ["this should return falsy"]
0

"thi is a string", ["this", "i i", " a", " string"]
0

"aaaaa", ["aa"]
0

"foo bar foobar", ["foo", "bar", " ", "spam"]
1

"ababab", ["a","ba","ab"]
1

"", ["The string can be constructed with nothing!"]
1

অ্যারেতে মূল স্ট্রিংটি তৈরি করার জন্য প্রয়োজনের চেয়ে বেশি স্ট্রিং রয়েছে কিনা তা বিবেচনা করে ?
শেগি

এই ক্ষেত্রে রিটার্নের মান কত হওয়া উচিত?
শেগি

পছন্দ করুন যদি অতিরিক্ত থাকে তবে স্ট্রিংটি সমস্ত অ-অতিরিক্ত অংশ দিয়ে তৈরি করা যেতে পারে। আমি একটি পরীক্ষার কেস যুক্ত করব।
কমরেড স্পার্কলপনি

3
আমি এই পরীক্ষার "ababab", ["a","ba","ab"]
গণিত জাঙ্কি

3
আমি আপনাকে রেজেজেক্স মেটাচার্যাক্টরযুক্ত একটি পরীক্ষার কেস যুক্ত করার পরামর্শ দেব।
জোয়

উত্তর:


11

ব্র্যাচল্যাগ , 8 বাইট

~c¬{∋¬∈}

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

এটি সত্যিই ধীর। "হ্যালো, বিশ্ব!" এর জন্য প্রায় 37 সেকেন্ড সময় নিয়েছিল আমার পিসিতে পরীক্ষার কেস এবং টিআইও-র সময়সীমা শেষ।

এটি ইনপুট ভেরিয়েবলের মাধ্যমে স্ট্রিংটি এবং আউটপুট ভেরিয়েবলের মাধ্যমে তালিকা গ্রহণ করে

ব্যাখ্যা

             String = ?, List = .

             It is possible to find…
~c           …a deconcatenation of ?…
  ¬{   }     …such that it is impossible…
    ∋¬∈      …that an element of that deconcatenation is not an element of .

"লা লাল আল" 60 সেকেন্ডেরও বেশি ...
রোজলুপি

1
@ রোসলুপ এই ইনপুটটি এবং তালিকাগুলি সহ ["la", " l", "al "]এটি আমার কম্পিউটারে বন্ধ হয়ে গেছে এবং false.6800 সেকেন্ড পরে সঠিকভাবে উত্তর দিয়েছে , এবং "কেবল" 113 বিলিয়ন ইনফারেন্স রয়েছে।
ফ্যাটালাইজ করুন

আমি মনে করি এই ভাষায় কিছু লেখার ফলস্বরূপ টিআইও হা হাতে চালিত নয় এমন একটি প্রোগ্রাম তৈরি হবে।
ম্যাজিক অক্টোপাস উরন

@ কারাসোকম্পুটিং বেশিরভাগ প্রোগ্রামের জন্য ভাষা এত ধীর নয়, কিছুটা ক্ষেত্রে প্রোগ্রামের ঘোষণার কারণে এটি
কার্যকরভাবে

@ ফ্যাটালাইজ এরর ... আমি বলতে চাইছিলাম গল্ফিং লিখছে না, কম নির্দেশাবলীর মতো মনে হচ্ছে, "প্রশ্ন" তত বিস্তৃত হবে এবং আপনার আরও গণনা প্রয়োজন। তাত্ত্বিক গণিত সমস্যাগুলির জন্য এক দুর্দান্ত ল্যাংজের মতো মনে হচ্ছে।
যাদু অক্টোপাস উরন

7

গণিত, 29 বাইট

StringMatchQ[#,""|##&@@#2..]&

ব্যাখ্যা:

             #,               (* The first argument *)
StringMatchQ[                 (* matches the string pattern *)
               ""|##&         (*   Alternatives *)
                     @@       (*     applied to *)
                       #2     (*     the second argument *)
                         ..   (*   repeated *)
                           ]&

বর্ডারলাইন প্রতারণার সমাধান, 21 বাইট

StringMatchQ[#,#2..]&

যেহেতু ম্যাথামেটিকাল একটি সিম্বলিক প্রোগ্রামিং ভাষা না থাকে, তখন এক্সপ্রেশন মধ্যে কোন * পার্থক্য নেই List[a,b,...]এবং Alternatives[a,b,...]তারা প্রদর্শিত কিভাবে সেগুলি ইন্টারঅ্যাক্ট অন্য চিহ্ন দিয়ে এবং কিভাবে হয় (ব্যতীত অন্য {a,b,...}এবং a|b|...যথাক্রমে)। দ্বিতীয় আর্গুমেন্টে ব্যবহার করার সময় StringMatchQ, একটি Alternativesএক্সপ্রেশনকে স্ট্রিং প্যাটার্ন হিসাবে বিবেচনা করা হয়, এবং এইভাবে আমরা 8দ্বিতীয় তর্কটিকে Alternativesএক্সপ্রেশন হিসাবে গ্রহণ করে আমার উপরের সমাধানের উপর দিয়ে বাইটগুলি সংরক্ষণ করতে পারি ।

টেকনিক্যালি Listএটিও রয়েছে Locked, যা ব্যবহারকারীদের Unprotectএটি আটকাতে এবং এর আচরণ পরিবর্তন করতে বাধা দেয় ।


1
{x,y,z}x|y|zস্ট্রিং প্যাটার্ন ম্যাচিংয়ের মতোই ব্যবহার করা হয়। আমি মনে করি আপনি ন্যায়বিচারের ""|##&@@#2..সাথে প্রতিস্থাপন করতে পারেন #2..
গাছ নেই

5

পাইথ, 23 বাইট

AQW&GhGJ.(G0Vf!xJTH aG>JlN;G

ইনপুট লাগে [['string'],['list', 'of', 'parts']]। আউটপুট হয় ফাঁকা তালিকা বা ভিতরে মান সহ একটি তালিকা। পাইথ-এ, এমন একটি তালিকা যা কিছু রয়েছে এমনকি একটি নাল স্ট্রিং ( [''])ও সত্য বলে মূল্যায়ন করে।

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

ব্যাখ্যা:

                             | Implicit: Q = eval(input())
AQ                           | Assign the first value of Q to G and the second to H
  W&GhG                      | While G is not empty and G doesn't contain an empty string:
       J.(G0                 |  Pop the first value of G and store into J
            Vf!xJTH          |  For N in elements in H that match the beginning of J:
                             |   Additional space for suppressing printing 
                    aG>JlN   |   Append to G the elements of J from the length of N to the end
                          ;  | End all loops
                           G | Print G

এই সমাধানটি ধারাবাহিকভাবে স্ট্রিংয়ের শুরু থেকে প্রতিটি সম্ভাব্য অংশটি সরিয়ে ফেলার চেষ্টা করে এবং এটি এখনও কী কী মূল্যবোধগুলি সন্ধান করতে হবে তা ট্র্যাক করে।

কিছুক্ষণ লুপের প্রতিটি পুনরাবৃত্তির পরে যদি আমরা Gপরীক্ষার ক্ষেত্রে মানটির দিকে লক্ষ্য করি তবে এটি [['ababab'],['a','ba','ab']]আমরা পাই:

['ababab']
['babab', 'abab']
['abab', 'bab']
['bab', 'bab', 'ab']
['bab', 'ab', 'b']
['ab', 'b', 'b']
['b', 'b', '']
['b', '']
['']   <---Remember, this evaluates to True

এবং, পরীক্ষার ক্ষেত্রে [['aaaaa'],['aa']], আমরা এটিই পাই:

['aaaaa']
['aaa']
['a']
[]   <---And this evaluates to False

আমি আরেকটি পরীক্ষার কেস তৈরি করেছি, [['aaaaaa'],['a','aa','aaa']]এবং আউটপুটটি এটি ছিল:

['', 'aaa', 'aa', 'a', 'aa', 'a', '', 'a', '', 'aa', 'a', '', 'a', '', '', 'a', '', '']

আউটপুট তালিকায় এটির ভিতরে প্রচুর আবর্জনা রয়েছে তবে এটি এখনও সত্যবাদী মান।


5

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

কোড + -pপতাকা 38 বাইট ।

map{chop;$v.="\Q$_\E|"}<>;$_=/^($v)*$/

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

"Hello, world!", ["l", "He", "o, wor", "d!"]ইনপুটটির জন্য (আসলে নিউলাইনগুলি দ্বারা পৃথক করা), এটি প্যাটার্নটি তৈরি করে l|He|o, wor|d!|(ধন্যবাদ মেটাচ্যাকারগুলি দিয়ে পালিয়ে \Q..\E), এবং তারপরে দেখায় যে প্রথম স্ট্রিংটি এই প্যাটার্নটির সাথে মেলে কিনা /^($v)*$/

ট্রাইআইটিঅনলাইনে, দ্রষ্টব্য যে এখানে একটি ট্রেলিং নিউলাইন থাকা দরকার।


"হ্যালো, দুনিয়া! আমি ও, ওয়ার্ড ডি!" "l" এর পরে কোনও স্থানের সাথে এই ইনপুট কোনও ফল দেয় না
রোজলুপি

@ রোসলুপি আপনি কি আমাকে ট্রাইআইটিঅনলাইন লিঙ্ক দিতে পারেন? (আপনি ঠিক কী বোঝেন তা আমি বুঝতে পারি না Note নোট করুন যে "মিথ্যা" আসলে পার্ল হিসাবে কিছুই ছাপায় না)
দাদা

মিথ্যা মুদ্রণ কিছুই জন্য? এই ক্ষেত্রে আমাকে ক্ষমা করুন, তবে
এটির

পছন্দ করেছেন পার্ল-এ, undefবেশিরভাগ বিল্টিন দ্বারা ফিরিয়ে দেওয়া মিথ্যা মান। এবং এটি মুদ্রণের সময়, এটি আসলে কিছুই প্রিন্ট করে না। এবং আমি ঠিক তাই করছি। "1/0" মুদ্রণ সি-জাতীয় ভাষার জন্য প্রাকৃতিক, তবে পার্লের জন্য, "1 / Undef" প্রাকৃতিক উপায়।
দাদা

কোনও আউটপুটে একটি অস্পষ্টতা নেই "এটি চলছে বা ইতিমধ্যে প্রোগ্রামটি শেষ হয়েছে?"
রোজলুপি

4

পিএইচপি, 69 বাইট

<?=($s=$_GET[0])>""?ctype_digit(strtr($s,array_flip($_GET[1])))?:0:1;

Testcases


খুব চালাক, আপনি কী করছেন তা বুঝতে আমাকে এক মিনিট সময় নিয়েছে। বক্সের বাইরে চিন্তা করার জন্য +1
মার্টিজন

এই সমস্যাযুক্ত প্রান্তের ক্ষেত্রে মিথ্যা নেতিবাচক["", ["The string can be constructed with nothing!"]]
জোনাথন অ্যালান

@ জোনাথন অ্যালান সম্পন্ন হয়েছে একটি খালি স্ট্রিং একটি স্ট্রিং?
জার্গ হালসারম্যান

হ্যাঁ, খালি পার্টিশনের সমস্যাটি অনেকগুলি সমাধানে একটি সমস্যা।
জোনাথন অ্যালান


3

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

সাবস্ট্রিংয়ের অ্যারে aএবং sবাক্য গঠন বাক্য গঠনে স্ট্রিং নেয় (a)(s)। রিটার্ন false/ true

a=>g=s=>!s||a.some(e=>s.split(e)[0]?0:g(s.slice(e.length)))

মন্তব্য

a =>                          // main function that takes 'a' as input
  g = s =>                    // g = recursive function that takes 's' as input
    !s ||                     // if 's' is empty, return true (success!)
    a.some(e =>               // else, for each element 'e' in 'a':
      s.split(e)[0] ?         //   if 's' doesn't begin with 'e':
        0                     //     do nothing
      :                       //   else:
        g(s.slice(e.length))  //     remove 'e' at the beginning of 's' and
    )                         //     do a recursive call on the remaining part

পরীক্ষার মামলা


3

হাস্কেল , 35 বাইট

#একটি সময় লাগে Stringএবং একটি তালিকা Strings, এবং একটি ফেরৎ Bool

s#l=elem s$concat<$>mapM("":)(l<$s)

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

আমি যে পরীক্ষার কেসটি ফেলে রেখেছি তা কেবল আপত্তি করবেন না কারণ এটি আমার অপ্রাপ্তবয়স্ক ল্যাপটপটি এমনকি -O2 দিয়েও ছিন্ন করেছে। আমি সন্দেহ করি যে জিএইচসি সেই মধ্যবর্তী 30517578125 উপাদান তালিকাটি সরিয়ে ফেলবে না, দ্রুত জঞ্জাল সংগ্রহ করার জন্য এটি খুব বেশি ভাগ করে নিয়েছে, এবং পরীক্ষার কেসটি মিথ্যা হওয়ায় প্রোগ্রামটি এর সবগুলিই জেনারেট করতে হয়েছে ... আপনি যদি চেষ্টা করতে পারেন তবে নির্দ্বিধায় যে হ্যান্ডেল।

mapM("":)(l<$s)length sখালি স্ট্রিং বা স্ট্রিং থেকে আসা উপাদানগুলির একটি তালিকা তৈরির সমস্ত পদ্ধতির একটি তালিকা l


3

পাইথ, 17 15 11 14 বাইট

AQ|!G}Ym-dH./G

3 বাইট যুক্ত করে খালি স্ট্রিংয়ের প্রয়োজনীয়তা পরিবর্তন হয়েছে।

ব্যাখ্যা

AQ|!G}Ym-dH./G
AQ                     Save the input into G, H.
           ./G         Get all partitions of G.
       m-dH            Check if the parts are in H.
     }Y                The empty list should be present if and only
                           if the string can be made...
  |!G                  ... or the string might be empty.

পুরানো সংস্করণ

AQ}Ym-dH./G

খাটো এবং মহাবিশ্বের জীবনকাল ধরে চলে!

ব্যাখ্যা

AQ}Ym-dH./G
AQ                  Save the input into G, H.
        ./G         Get all partitions of G.
    m-dH            Check if the parts are in H.
  }Y                The empty list should be present if and only
                        if the string can be made.

AQ&G}GsMs.pMy*HlG

এটি ভয়াবহভাবে ধীর, তবে এটি আমার (তুচ্ছ ছোট) পরীক্ষার ক্ষেত্রে কাজ করে works

ব্যাখ্যা

AQ&G}GsMs.pMy*HlG
AQ                  Save the input into G, H.
             *HlG   Repeat the list of substrings for each character of G.
            y       Take the power set.
         .pM        Take every permutation of each set of substrings.
      sMs           Get a list of all the joined strings.
    }G              Check if G is one of them.
  &G                Make sure G is not empty.

3

জেলি , 14 12 8 বাইট

;FŒṖḟ€Ạ¬

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

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

;FŒṖḟ€Ạ¬   - main function, left argument s, right argument l
;F         - concatenate to the string the list, flattened to deal with "" as string
  ŒṖ       - Get all partitions of s, that is, all ways to make s from substrings
     €     - For each partition...
    ḟ      -   Filter out (exclude) those elements which are not in... 
           -   (implicit right arg) the list l. This leaves the empty set (falsy) if the partition can be made of elements from the list
      Ạ    - If any element is falsy (thus constructable from l), return 0; else return 1
       ¬   - Apply logical not to this, to yield the proper 1 = constructable from list, 0 otherwise.

মামলা bugfix "", ["The string can be constructed with nothing"]@JonathanAllan ধন্যবাদ


মিথ্যা নেতিবাচক"", ["The string can be constructed with nothing!"]
জোনাথন অ্যালান

এটি অনেক ধীর হবে তবে ;FŒṖḟ⁹$€Ạ¬এটি ঠিক করবে।
জোনাথন অ্যালান

... এবং আপনি এর জন্য একটি অন্তর্নিহিত সঠিক যুক্তি ব্যবহার করতে পারেন , সুতরাং আপনার প্রয়োজন $বা : এর দরকার নেই ;FŒṖḟ€Ạ¬
জোনাথন অ্যালান

জিআর, প্রতিটি টেস্টকেস পরীক্ষা না করার জন্য আমি এটিই পাই। আমি ¬কোনও অপারেশনকে প্রতিস্থাপন করে 8 বাইট রক্ষণ করতে সক্ষম হতে পারি যা সর্বদা সঠিক যুক্তি দিয়ে সত্য হয় ""।
fireflame241

^ ভাল আমি এটি 8 এ ফিরে পেয়েছি :)
জোনাথন অ্যালান


2

পাইথ, 10 8 বাইট

f!-TQ./+zh

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

এটি STDIN এর প্রথম লাইনে তালিকাটি এবং দ্বিতীয়টিতে স্ট্রিং (কোট ছাড়াই) নেয় takes

শুরু করতে, তালিকাটি সংরক্ষণ করা হয় Qএবং স্ট্রিংটি এতে সঞ্চিত থাকে z। এর পরে, আমরা এর সম্ভাব্য সমস্ত পার্টিশন গঠন করি z। প্রতিটি পার্টিশন ফিল্টার করা হবে ( f) এটি কেবলমাত্র টুকরা ব্যবহার করে কিনা তা পরীক্ষা করতেQ । এটি করার জন্য, আমরা এর সমস্ত উপাদান মুছে ফেলিQT যে পার্টিশনটি ভাগ করছি তার থেকে ফেলি এবং ফলাফলটিকে যুক্তিযুক্তরূপে !উপেক্ষা করে, যাতে প্রতিটি উপাদান যেখানে রয়েছে কেবল সেখানেই Qরাখা যায়।

''কোনও পার্টিশন নেই এমন সমস্যাটি সমাধান করতে আমরা অভিধানের প্রথম শব্দটি z এ যুক্ত করি, যাতে এটি কোনও খালি স্ট্রিং না হয়ে থাকে।


পরীক্ষার স্যুটটি নীচের লাইনটি (একটি খালি স্ট্রিং) মিস করে - এটির উদ্ধৃতি দরকার? একটি খালি লাইন বা ""এটি ক্ষেত্রে ব্যর্থ বলে মনে হচ্ছে।
জোনাথন অ্যালান

একটি খালি স্ট্রিংয়ের কোনও পার্টিশন নেই, সুতরাং এটি আসলে এখানে সঠিক উত্তর দেয়। ডার্ন, আমি এটি ঠিক করার চেষ্টা করব।
isaacg

জেলির জন্য আমি যে স্থির পরামর্শ দিয়েছিলাম তা হ'ল ইনপুট স্ট্রিংটি ইনপুট অ্যারে সমতল করে দেওয়া, সম্ভবত আপনিও কি তা করতে পারেন?
জোনাথন অ্যালান

@ জোনাথান অ্যালান আমি অনুরূপ কিছু করেছি, ধন্যবাদ।
isaacg

এর কেসগুলি কভার করা হয়নি "", [""]এবং "", []তাদের আওতায় আনা হয়নি - সেখানে যেতে দেওয়া যাক :)
জোনাথন অ্যালান

2

পাওয়ারশেল, 61 58 57 বাইট

{$s,$l=$_;$l|sort -d length|%{$s=$s.replace($_,'')};+!$s}

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

পুরানো সমাধান:

{$s,$l=$_;$l|sort -d length|%{$s=$s.replace($_,'')};[int]!$s}
{$s,$l=$_;$l|sort -d length|%{$s=$s.replace($_,'')};0+!$s}  

এটি একটি প্রায় অপঠনযোগ্য, তাই আমি এটিকে কিছুটা পরিবর্তন করার প্রস্তাব দিই। আমি মোটামুটিভাবে নিশ্চিত যে অন্যান্য বেশিরভাগ লোকেরা এতে সম্মত হবে।
21

আমার সমাধানটি সংশোধন করার কারণ ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ।
Andrei Odegov

1

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

lambda s,l:len(re.findall("^("+"|".join(l)+")*$",s))>0
import re

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


আমি মনে করি এটি পুরোপুরি কার্যকর হয় না, চেষ্টা করুন ("aaaaaaa",["aa","aaa"])
xnor

@ এক্সনর আমি এটি আপডেট করেছি। অনুসন্ধানে আসুন, রেজেেক্স এটির জন্য উপযুক্ত।
নীল

4
ব্যর্থ হওয়া উচিত ('x', '.'), আমার ধারণা, কিন্তু হয় না।
জোয়

1
@nfnneil আপনি কি করেছেন? আপনার শেষ সম্পাদনাটি 10 ​​ঘন্টা আগে হয়েছিল।
ডেনিস

1
... বা "Hello", ["\w"]ইত্যাদি
জোনাথন অ্যালান

1

পাওয়ারশেল, 78

$s,$l=$args;!($s-creplace(($l|sort -d length|%{[regex]::escape($_)})-join'|'))

খুব সোজা সোজা রেজেক্স-ভিত্তিক পদ্ধতি


1

সিজেএম (16 বাইট)

{Ma+1$,m*:e_\a&}

এটি স্ট্যামের স্ট্রিং এবং স্ট্রিংগুলির অ্যারে গ্রহণ করে একটি বেনামে ব্লক (ফাংশন)। অনলাইন ডেমো

এটি সুস্পষ্ট আলগোরিদম ব্যবহার করে:

{        e# Declare a block. Call the args str and arr
  Ma+    e#   Add the empty string to the array
  1$,m*  e#   Take the Cartesian product of len(str) copies of (arr + [""])
  :e_    e#   Flatten each element of the Cartesian product into a single string
  \a&    e#   Intersect with an array containing only str
}

রিটার্ন মানটি যদি strতৈরি না করা যায় তবে খালি অ্যারে / স্ট্রিং (মিথ্যা) , বা তৈরি করা যায় তবে একটি অ্যারে str(সত্যবাদী, এমনকি strখালি স্ট্রিং হলেও ) থাকে।


@ রোসলুপি, আপনার অর্থ কী তা আমি নিশ্চিত নই। এই নির্দিষ্ট পরীক্ষার কেসটি এত তাড়াতাড়ি চালায় যে আমি আসলে সময় দিতে পারি না। অন্যান্য পরীক্ষার ক্ষেত্রে মৃত্যুদন্ড কার্যকর করতে দীর্ঘ সময় লাগে, তবে অনুমানটিতে কোনও সময়ের সীমাবদ্ধতা অন্তর্ভুক্ত নয়।
পিটার টেলর

@ রোসলুপি, অনলাইন ডেমো । তবে আপনার অভিযোগ কি তা আমি বুঝতে পারি না।
পিটার টেলর

1

সি ++ (বিসিসি), 287 বাইট

#include<algorithm.h>
f(a,b)char*a,**b;{int i,j,k,v,p[256];if(!a||!b||!*b)return-1;for(v=0;v<256&&b[v];++v)p[v]=v;if(v>=256)return-1;la:for(i=0,j=0;j<v&&a[i];){for(k=0;b[p[j]][k]==a[i]&&a[i];++i,++k);j=b[p[j]][k]?(i-=k),j+1:0;}if(a[i]&&next_permutation(p,p+v)) goto la;return i&&!a[i];}

কারণ আমি পরের_পরিচয় () লিখি বা খুব বেশি ব্যবহার করি না () ঠিক আছে কিনা আমি জানি না। আমি যদি 100% জানি না তবে এটির সমাধানটি সম্ভবত এটি মানের থেকেও বাইরে ... স্ট্রিংয়ের একটি তালিকা এখানে চরকে পয়েন্টারগুলির একটি অ্যারে; নূতকে সমাপ্ত করা সহজভাবে অ্যালগো সহজ, একটি লিংগারিটি চেষ্টা করে থাকে যদি তালিকার সমস্ত স্ট্রিং যুক্তি "a" স্ট্রিংয়ের সাথে খাপ খায় তবে স্ট্রিংয়ের তালিকাকে সূচি দেয় এমন অন্য একটি অ্যালগো থাকে যাতে এটি সমস্ত সম্ভাব্য সংমিশ্রণের চেষ্টা করে।

এটি অগল্ফ, পরীক্ষার কোড এবং ফলাফল এখানে

#include<stdio.h>
g(a,b)char*a,**b;
{int i,j,k,v,p[256];
 if(!a||!b||!*b) return -1;
 for(v=0;v<256&&b[v];++v) p[v]=v;
 if(v>=256)      return -1; // one array of len >256 is too much
la: 
 for(i=0,j=0;j<v&&a[i];)
   {for(k=0;b[p[j]][k]==a[i]&&a[i];++i,++k); 
    j=b[p[j]][k]?(i-=k),j+1:0;
   } 
 if(a[i]&&next_permutation(p,p+v)) goto la;
 return i&&!a[i];  
}

#define F for
#define P printf

test(char* a, char** b)
{int i;
 P("f(\"%s\",[",a);
 F(i=0;b[i];++i) 
       P("\"%s\"%s", b[i], b[i+1]?", ":"");
 P("])=%d\n", f(a,b));
}

main()
{char *a1="Hello, world!",    *b1[]={"l","He", "o, worl", "d!",      0};//1
 char *a2="la lal al ",       *b2[]={"la", " l", "al ",              0};//1
 char *a3="this is a string", *b3[]={"this should return falsy",     0};//0
 char *a4="thi is a string",  *b4[]={"this", "i i", " a", " string", 0};//0
 char *a5="aaaaa",            *b5[]={"aa",                           0};//0
 char *a6="foo bar foobar",   *b6[]={"foo","bar"," ","spam",         0};//1
 char *a7="ababab",           *b7[]={"a","ba","ab",                  0};//1
 char *a8="",                 *b8[]={"This return 0 even if has to return 1", 0};//0
 char *a9="ababc",            *b9[]={"a","abc", "b", 0};//1

  test(a1,b1);test(a2,b2);test(a3,b3);test(a4,b4);test(a5,b5);test(a6,b6);
  test(a7,b7);test(a8,b8);test(a9,b9);
}

f("Hello, world!",["l", "He", "o, worl", "d!"])=1
f("la lal al ",["la", " l", "al "])=1
f("this is a string",["this should return falsy"])=0
f("thi is a string",["this", "i i", " a", " string"])=0
f("aaaaa",["aa"])=0
f("foo bar foobar",["foo", "bar", " ", "spam"])=1
f("ababab",["a", "ba", "ab"])=1
f("",["This return 0 even if has to return 1"])=0
f("ababc",["a", "abc", "b"])=1

এটি জিসিসি সি ++ কম্পাইলারে সংকলন করবে

#include<algorithm>

int f(char*a,char**b){int i,j,k,v,p[256];if(!a||!b||!*b)return -1;for(v=0;v<256&&b[v];++v)p[v]=v;if(v>=256)return -1;la:;for(i=0,j=0;j<v&&a[i];){for(k=0;b[p[j]][k]==a[i]&&a[i];++i,++k);j=b[p[j]][k]?(i-=k),j+1:0;}if(a[i]&&std::next_permutation(p,p+v))goto la;return i&&!a[i];}

সি +++ কে ভালবাসবে! :)
মেমার্ক

1

পাইথন, 66 বাইট

lambda s,l:s==''or any(x==s[:len(x)]and f(s[len(x):],l)for x in l)

Ungolfed:

def f(s,l):
    if s=='': 
        return 1
    for x in l:
        if s.startswith(x) and f(s[len(x):],l):
            return 1
    return 0

0

মাইক্রোসফ্ট SQL সার্ভার, 353 বাইট

u as(select s.n,s collate Latin1_General_BIN s,l collate Latin1_General_BIN l,
row_number()over(partition by l.n order by len(l)desc)r from s,l where s.n=l.n),
v as(select n,s,l,replace(s,l,'')c,r from u where r=1 union all
select u.n,u.s,u.l,replace(v.c,u.l,''),u.r from v,u where v.n=u.n and v.r+1=u.r)
select s,iif(min(c)='',1,0)u from v group by n,s

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

পঠনযোগ্য সংস্করণ:

with s as(
  select n,s
  from(values(1,'Hello, world!'),
             (2,'la lal al '),
             (3,'this is a string'),
             (4,'thi is a string'),
             (5,'aaaaa'),
             (6,'foo bar foobar'),
             (7,'ababab'),
             (8,''))s(n,s)),
l as(
  select n,l
  from(values(1,'l'),(1,'He'),(1,'o, wor'),(1,'d!'),
             (2,'la'),(2,' l'),(2,'al '),
             (3,'this should return falsy'),
             (4,'this'),(4,'i i'),(4,' a'),(4,' string'),
             (5,'aa'),
             (6,'foo'),(6,'bar'),(6,' '),(6,'spam'),
             (7,'a'),(7,'ba'),(7,'ab'),
             (8,'The string can be constructed with nothing!'))l(n,l)),
--The solution starts from the next line.
u as(
  select s.n,
    s collate Latin1_General_BIN s,
    l collate Latin1_General_BIN l,
    row_number()over(partition by l.n order by len(l)desc)r
  from s,l
  where s.n=l.n),
v as(
  select n,s,l,replace(s,l,'')c,r from u where r=1
    union all
  select u.n,u.s,u.l,replace(v.c,u.l,''),u.r
  from v,u
  where v.n=u.n and v.r+1=u.r
)
select s,iif(min(c)='',1,0)u from v group by n,s

0

সি, 140 বাইট

আমি নিশ্চিত যে সি তে এটি করার একটি ছোট উপায় আছে তবে আমি একটি সমাধান তৈরি করতে চেয়েছিলাম যা সাধারণ সন্ধান / প্রতিস্থাপন পদ্ধতির পরিবর্তে সাবস্ট্রিংগুলির সমস্ত সম্ভাব্য সংমিশ্রণ পরীক্ষা করে tests

char p[999];c,o;d(e,g,l,f)int*e,**g,**l;{c=f&&c;for(l=g;*l;)strcpy(p+f,*l++),(o=strlen(p))<strlen(e)?d(e,g,0,o):(c|=!strcmp(e,p));return c;}

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

Ungolfed:

#include <string.h>
#include <stdio.h>

char buf[999];
int result;
int temp;

int test(char *text, char **ss, char **ptr, int length) 
{
    if (length == 0)
        result = 0;

    for(ptr = ss; *ptr; ptr++)
    {
        strcpy(buf + length, *ptr);
        temp = strlen(buf);
        if (temp < strlen(text))
        {
            // test recursivly
            test(text, ss, 0, temp);
        }
        else
        {
            if (strcmp(buf, text) == 0)
                result = 1;
        }
    }
    return result;
}

int main()
{
    char *text = "Hello,World";
    char *keywords[] = { "World", "Hello", ",", 0 };
    printf("%d", test(text, keywords, 0, 0));
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.