আমার [সাব] স্ট্রিং লুকিয়ে আছে!


21

ভূমিকা

কিছুক্ষণ আগে একজন হারিয়ে যাওয়া এসও ব্যবহারকারী এখানে একটি প্রশ্ন পোস্ট করেছিলেন এবং এটি এখন মুছে ফেলা হয়েছে তবে আমি মনে করি এটি একটি ভাল চ্যালেঞ্জ তৈরি করবে তাই এখানে চলে যায় ...

চ্যালেঞ্জ

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

ইনপুট

দুটি স্ট্রিং, একটি স্ট্রিং এবং পরীক্ষার জন্য একটি সাব-স্ট্রিং (আপনি ক্রমটি বেছে নিতে পারেন)।

আউটপুট:

সত্যিকারের মান যদি স্ট্রিংটিতে উপ-স্ট্রিংয়ের কোনও ক্রম থাকে।
যদি স্ট্রিংটিতে সাব-স্ট্রিংয়ের কোনও ক্রম থাকে না তবে একটি মিথ্যা মান।
পরীক্ষাটি কেস সেনসিটিভ।

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

         sub-string    string          
input    d!rl          Hello World!
output   truthy

input    Pog           Programming Puzzles & Code Golf
output   falsey

input    ghjuyt        asdfhytgju1234
output   truthy

সত্য এবং মিথ্যা মানটি কি সামঞ্জস্যপূর্ণ বা যথাযথভাবে সত্যবাদী বা মিথ্যা হতে হবে?
এরিক আউটগল্ফার

পছন্দ করুন
নোটস 90

উত্তর:



7

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

(s,t)=>t&&[...t.slice(0,s.length)].sort()+''==[...s].sort()|f(s,t.slice(1))

1 বা 0 প্রদান করে

টুকিটাকি

f=

(s,t)=>t&&[...t.slice(0,s.length)].sort()+''==[...s].sort()|f(s,t.slice(1))

console.log(f('d!rl','Hello World!'))                   //1
console.log(f('Pog','Programming Puzzles & Code Golf')) //0
console.log(f('ghjuyt','asdfhytgju1234'))               //1


2
এটি যে সংস্করণগুলি ক্রম ব্যবহার ব্যবহার করে তার চেয়ে অনেক দ্রুত।
ডেভিড কনরাড

6

পাইথন 2, 67 66 বাইট

প্রথমে স্ট্রিং করে দুটি স্ট্রিং হিসাবে ইনপুট নেয়।

a=sorted
lambda s,S:a(s)in[a(S[n:n+len(s)])for n in range(len(S))]

1
নাম দিয়ে একটি বাইট সংরক্ষণ করুন sorted
জোনাথন অ্যালান

6

05 এ বি 1 , 3 বাইট

όZ

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

-1 বাইট ধন্যবাদ Emigna

ব্যাখ্যা:

όZ 2 inputs
œ                  permutations of the first input
 å  Is each of the                                 in the second input?
  Z Take the maximum of the resulting boolean list

আমি আপনার প্রয়োজন মনে করি না.
এমিগিনা

এটি আমার ফোন কিনা তা নিশ্চিত নন তবে টিআইও ভেঙে গেছে বলে মনে করেন, ভাষা পাওয়া যায় নি।
নোটস 90

@ নোটস 90 এটি টিআইও ভি 2 টিআইও নেক্সাস নয়, নিজের ক্যাশে সাফ করার চেষ্টা করুন। এটা আমার জন্য কাজ করে.
এরিক দি আউটগল্ফার

@ এমিগনা স্পষ্টত "ভেক্টরাইজড" অর্থ দ্বিতীয় যুক্তি প্রথম নয় ...
এরিক দ্য আউটগল্ফার

2
যদি আপনি কেবল 4
নীল এ

5

জাভা 8, 266 244 বাইট

import java.util.*;Set l=new HashSet();s->p->{p("",p);for(Object x:l)if(s.contains(x+""))return 1>0;return 0>1;}void p(String p,String q){int n=q.length(),i=0;if(n<1)l.add(p);else for(;i<n;)p(p+q.charAt(i),q.substring(0,i)+q.substring(++i,n));}

ব্যাখ্যা:

এখানে চেষ্টা করুন।

java.util.*;                   // Required import for Set and HashSet

Set l=new HashSet();           // Class-level Set

s->p->{                        // Method (1) with two String parameters and boolean return-type
  p("",p);                     //  Put all permutations in the class-level Set
  for(Object x:l)              //  Loop over the permutations:
    if(s.contains(x+""))       //   If the input String contains one of the permutations:
      return 1>0;//true        //    Return true
                               //  End of loop (implicit / single-line body)
  return 0>1;//false           //  Return false
}                              // End of method (1)

void p(String p,String q){     // Method (2) with two String parameters and no return-type
  int n=q.length(),i=0;        //  Two temp integers
  if(n<1)                      //  If `n` is zero:
    l.add(p);                  //   Add this permutation of the String to the Set
  else                         //  Else:
    for(;i<n;                  //   Loop over `n`
      p(p+q.charAt(i),q.substring(0,i)+q.substring(++i,n))
                               //    Recursive-call with permutation parts
    );                         //   End of loop (no body)
}                              // End of method (2)

সি # তে একটি অকার্যকর ল্যাম্বদা এর Action<params>পরিবর্তে Func<params, returnVal>। আমি ধরে নিলাম এটিও তেমন কিছু হবে।
TheLethalCoder

1
পছন্দ করুন ব্যবহার করা উচিত Consumerএবং accept(...)পরিবর্তে Functionএবং apply(...)যখন আমি একটি প্যারামিটার এবং কোন রিটার্ন টাইপ সঙ্গে একটি ল্যামডা করাতে চাই। আমি বর্তমানে জাভা 8. শিখছি :) কিন্তু যেহেতু আমি পরিবর্তন করতে হবে void p(String p,String q), p("",p);এবং p(p+q.ch...,q.sub...)থেকে p->q->, p.apply("").accept(p);এবং p.apply(p+q.ch...).accept(q.sub...)এটা মেন মেথড জন্য ল্যামডা সংমিশ্রণ ব্যবহার করতে খাটো, এবং শুধুমাত্র একটি জাভা 7 void p(String p,String q)রিকার্সিভ-পদ্ধতির জন্য পদ্ধতি।
কেভিন ক্রুইজসেন

ভাল, কমপক্ষে আপনি এটি বের করে
ফেলেছেন

আমি Function<String, Predicate<String>>আমার একটি ব্যবহার ।
ডেভিড কনরাড

5

জেলি , 5 বাইট

Œ!ẇ€Ṁ

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

-1 আমাকে গল্ফিংয়ের পুনরায় চেষ্টা করতে উত্সাহ দেওয়ার জন্য এমিগিনার ধন্যবাদ ।

ব্যাখ্যা:

Œ!ẇ€Ṁ Main link, dyadic
Œ!               the permutations of the left argument
  ẇ€  Is each of                                      in the right argument?
    Ṁ Maximum of boolean values 

5

জাপট, 10 7 বাইট

á d!èV

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


ব্যাখ্যা

á d@VèX  
         :Implicit input of (sub)string U
á        :Create an array of all possible permutations of U
  d      :Map over the array, checking if any element returns true for...
   @     :the function that checks..
     è   :the number of matches...
      X  :of current element (permutation) X...
    V    :in main string V.
         :(0 is falsey, anything else is truthy)
         :Implicit output of result

4

পাইথন , 60 বাইট

টিফেল্ডের উত্তরের একটি পরিবর্তিত রূপ - কিছু ক্রেডিট দিন!

s=sorted
f=lambda u,t:s(u)==s(t[:len(u)])or t and f(u,t[1:])

পুনরাবৃত্ত ফাংশন বুলিয়ান True(সত্যবাদী) বা একটি খালি স্ট্রিং (মিথ্যা) প্রদান করে।

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

সাবস্ট্রিং, বাছাই করে u, এবং STRING সামনে একই দৈর্ঘ্য, t(একটি ফালি ব্যবহার t[:len(u)]) যদি তারা একই তারপর হয় Trueফিরিয়ে দেওয়া হয়, অন্যথায় যদি tএখনও truthy (খালি নয়) সঙ্গে recurses একটি dequeued t(একটি ফালি ব্যবহার করে, t[1:]) । যদি tখালি হয়ে andমৃত্যুদন্ড কার্যকর করা হয় না এবং এটা খালি tফিরিয়ে দেওয়া হয়।


আপনার প্যারামিটার হিসাবে ল্যাম্বডা থাকতে পারে: lambda u,t,s=sorted:ওয়ান-লাইনারের জন্য, কোনও বাইট যদিও সেভ করা হয়নি
রড

ফাংশনটি পুনরাবৃত্ত হওয়ার কারণে @ কেট অ্যাসাইনমেন্টটি প্রয়োজনীয়।
জোনাথন অ্যালান

4

পাইথ, 9 8 বাইট

sm}dQ.pE

-1 বাইট @ ইরিক_থ_আউটগল্ফারকে ধন্যবাদ

দুটি উদ্ধৃত স্ট্রিং নেয়, যার দ্বিতীয়টি সাবস্ট্রিং।

চেষ্টা করে দেখুন!


ওপি বলেছে যে এটি কেবল সত্য / মিথ্যা হতে পারে, অগত্যা সুসংগত নয়, আপনি এর sপরিবর্তে ব্যবহার করতে পারেন }1
এরিক দ্য আউটগল্ফার

3

গণিত, 55 50 বাইট

-202729 ব্যবহারকারীর থেকে 5 বাইট

StringFreeQ[#2,""<>#&/@Permutations@Characters@#]&

ফেরত পাঠায় Falseযদি প্রথম ইনপুট একটি বিন্যাস দ্বিতীয় স্ট্রিং হয়। রিটার্নস Trueযদি প্রথম ইনপুট একটি বিন্যাস দ্বিতীয় স্ট্রিং নেই।

ব্যাখ্যা:

                                    Characters@#   - split first string into array of characters
                       Permutations@               - make all permutations
               ""<>#&/@                            - join each array of characters together to form a single string
StringFreeQ[#2,                                 ]& - Check if any of these string is in the second input string

আউটপুট কেবল "সত্যবাদী / মিথ্যা" হতে হবে আক্ষরিক True/ নয় False
ইয়ান মিলার

সম্পর্কে অনুস্মারক জন্য ধন্যবাদ Characters
ইয়ান মিলার

3

সিজেম , 13 12 বাইট

le!lf{\#)}:+

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

আমার মনে হয় অন্যান্য গল্ফিং ভাষার তুলনায় সিজেএম সত্যিই সীমিত, তবে সম্ভবত এটি আমার খারাপ হচ্ছে ...

আমি অন্যের কাছে যাওয়ার কথা ভাবছি। 05AB1E মজাদার মনে হচ্ছে।

এরিক দ্য আউটগল্ফার কেটে একটি কামড়কে স্থির করা ছোট বাগ ধন্যবাদ
কারণ শূন্য নয় সংখ্যা সত্য numbers

ব্যাখ্যা:

l                 Read substring
 e!               Generate all permutations
   l              Read string
    f{            For each permutation
      \#            Check if it is in the string (returns -1 if not found)
        )           Add one
         }        End for
          :+      Sum the whole found/not found array

আমি মনে করি এটি অবৈধ, ইনপুটগুলি aএবং কী সম্পর্কে abc?
এরিক আউটগল্ফার

আপনি ঠিক বলেছেন এটি> 0
ফ্রডকিউব 26:37

1
তবে আপনি করতে পারেন W>
এরিক আউটগল্ফার

@ এরিকথ আউটগল্ফারকে le!lf{\#)}:+একটি বৈধ সমাধান হিসাবে বিবেচনা করা হবে? 0যদি স্ট্রিংটি পাওয়া না যায় এবং অন্যথায় কিছু ধনাত্মক সংখ্যা পাওয়া যায় তবে তা আউটপুট করা উচিত । একটি শূন্য-সংখ্যাটি truthyকী বৈধ ?
ফ্রডকিউব

ওপি'র স্পষ্টতা অনুসারে আপনি এর )পরিবর্তে ব্যবহার করতে পারেন W>
এরিক আউটগল্ফার

3

জাভা 9 জেশেল , 160 বাইট

p->q->IntStream.range(0,q.length()-p.length()+1).anyMatch(
    i->Arrays.equals(
        q.substring(i,i+p.length()).chars().sorted().toArray(),
        p.chars().sorted().toArray()))

(পাঠযোগ্যতার জন্য নতুন লাইনে linesোকানো হয়েছে)

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

দ্রষ্টব্য: জেশেল ডিফল্টরূপে বেশ কয়েকটি আমদানি অন্তর্ভুক্ত করে। একটি জাভা 8 বা জাভা 9 সমাধান হিসাবে, এটি আমদানি করা প্রয়োজন হবে:

import java.util.*;import java.util.stream.*;

অতিরিক্ত 45 বাইট বা মোট 205 বাইটের জন্য। উপরের টিআইও লিঙ্কটি একটি জাভা 9 প্রোগ্রামের জন্য যেহেতু টিআইও বর্তমানে জেসেল নেই (এবং এটি জেএসেল কীভাবে টিআইওতে কাজ করবে তা আমার কাছে পরিষ্কার নয়)।


জাভা 9 এখন একটা জিনিস? : |
ক্যালকুলেটরলাইন

@CalculatorFeline আগাম অ্যাক্সেস তৈরী করে বেশ কিছু সময়ের জন্য উপলব্ধ হয়েছে, কিন্তু সরকারী মুক্তির তারিখ 2017-07-27 হয়
ডেভিড কনরাড

2

সি #, 320 বাইট

using System.Linq;s=>u=>p(u.ToArray(),0,u.Length-1).Any(p=>s.Contains(p));w=(c,a,b)=>{if (a!=b)(var t=c[a];c[a]=c[b];c[b]=t;)};System.Collections.Generic.IEnumerable<string>p(char[]l,int k,int m){if(k==m)yield return new string(l);else for(int i=k;i<=m;){w(l,k,i);foreach(var c in p(l,k+1,m))yield return c;w(l,k,i++);}}

আমি নিশ্চিত যে অনুমানের গণনা করা অনেক ছোট হতে পারে তবে এই মুহুর্তে আমি দেখতে পাচ্ছি না।

ফর্ম্যাট / সম্পূর্ণ সংস্করণ:

void test()
{
    Func<string, Func<string, bool>> f = s => u =>
        p(u.ToArray(), 0, u.Length - 1).Any(p => s.Contains(p));

    Console.WriteLine(f("Hello World!")("d!rl"));
    Console.WriteLine(f("Programming Puzzles & Code Golf")("Pog"));
    Console.WriteLine(f("asdfhytgju1234")("ghjuyt"));
}

System.Collections.Generic.IEnumerable<string>p(char[] l, int k, int m)
{
    Action<char[], int, int> w = (c, a, b) =>
    {
        if (a != b)
        {
            var t = c[a];
            c[a] = c[b];
            c[b] = t;
        }
    };

    if (k == m)
        yield return new string(l);

    else
        for (int i = k; i <= m;)
        {
            w(l, k, i);

            foreach (var c in p(l, k + 1, m))
                yield return c;

            w(l, k, i++);
        }
}

হ্যাঁ, দুর্ভাগ্যক্রমে লিনক ব্যবহার করা প্রায়শই (..) for for এর জন্য সহজ থেকে লম্বা করে তোলে
ইওয়ান


2

পার্ল 6 , 48 বাইট

{$^a.contains(any $^b.comb.permutations».join)}

স্ট্রাস্ট্রিং হিসাবে প্রতিটি অনুক্রমের উপস্থিতির একটি বা জংশন ফিরিয়ে দেয়। উদাহরণস্বরূপ, যুক্তি সহ "Hello World!"এবং "d!l"রিটার্ন সহ:

any(False, False, False, False, True, False)

... যা Trueএকটি বুলিয়ান প্রসঙ্গে "ধসে পড়ে" । যে, জংশন সত্যবাদী মান।


2

পিএইচপি> = 7.1, 91 বাইট

for([,$x,$y]=$argv;~$p=substr($y,$i++,strlen($x));)$t|=($c=count_chars)($x)==$c($p);echo$t;

Testcases


1
~$pপরিবর্তে চেষ্টা করুন a&$p
তিতাস

আমি যখন আপনার কোডটি লিংকটি ব্যবহার করে চালানোর চেষ্টা করব তখন এটি অপ্রত্যাশিত বলছে,
নট 9090

@ নোটস 90 অনুগ্রহ করে 7.1 এর উপরে একটি পিএইচপি সংস্করণ ব্যবহার করুন
জার্গ হালসারম্যান

@ জার্গহালসারম্যান যে কাজ করে, এটি ডিফল্ট হয়েছিল .0.০.৩
নোট 90

1

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

import Data.List
s#t=any(`isInfixOf`s)$permutations t

উভয়ের জন্য Data.List এর দক্ষতা ব্যবহার করে isInfixOfএবং সেইসাথে permutations




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