मेरे [उप] तार छुप रहे हैं!


21

परिचय

कुछ समय पहले एक खोए हुए उपयोगकर्ता ने यहां एक प्रश्न पोस्ट किया था और अब इसे हटा दिया गया है, लेकिन मुझे लगता है कि यह एक अच्छी चुनौती बना देगा ताकि यह आगे बढ़े ...

चुनौती

एक पूर्ण प्रोग्राम या फ़ंक्शन लिखें जो दो तार लेता है और यह जांचता है कि क्या पहले स्ट्रिंग का कोई क्रमचय दूसरे स्ट्रिंग का उप-स्ट्रिंग है या नहीं।

इनपुट

दो तार, परीक्षण करने के लिए एक स्ट्रिंग और एक उप-स्ट्रिंग (आप ऑर्डर चुन सकते हैं)।

आउटपुट:

एक सत्य मान अगर स्ट्रिंग उप-स्ट्रिंग के किसी भी क्रमचय शामिल है।
यदि स्ट्रिंग उप-स्ट्रिंग के किसी भी क्रमपरिवर्तन में नहीं है तो एक गलत मूल्य।
परीक्षण संवेदनशील है।

उदाहरण / परीक्षण मामले

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

input    Pog           Programming Puzzles & Code Golf
output   falsey

input    ghjuyt        asdfhytgju1234
output   truthy

क्या सत्य और मिथ्या मूल्य सुसंगत या उचित रूप से सत्य या गलत होना चाहिए?
एरिक आउटग्लोफर

@EriktheOutgolfer बस उपयुक्त ठीक है।
नॉट्स90

जवाबों:



7

जावास्क्रिप्ट (ईएस 6), 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

05AB1E , 3 बाइट्स

όZ

इसे ऑनलाइन आज़माएं!

-1 बाइट एमिग्ना के लिए धन्यवाद

स्पष्टीकरण:

ό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

मुझे नहीं लगता कि आपको जरूरत है.
Emigna

यकीन नहीं होता कि यह मेरा फोन है लेकिन TIO टूटा हुआ लगता है, कहते हैं कि भाषा नहीं मिली।
नॉट्स 90

@ Notts90 यह TIO v2 नहीं TIO Nexus है, अपने कैश को साफ़ करने का प्रयास करें। इससे मेरा काम बनता है।
बजे द एग्रीगेटर

@Emigna जाहिरा तौर पर "सदिश" का अर्थ है दूसरा तर्क पहले नहीं ...
एग्री द आउटगोलर

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)

C # में 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)पुनरावर्ती-विधि के लिए विधि।
केविन क्रूज़सेन

अच्छा लगा, कम से कम आपने इसका पता लगा लिया
TheLethalCoder

मैंने 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 बाइट्स

TFeld के उत्तर का एक परिवर्तित रूप - कुछ क्रेडिट दें!

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

बूलियन लौटाने वाला पुनरावर्ती कार्य True (सत्य) या एक रिक्त स्ट्रिंग (झूठा) ।

इसे ऑनलाइन आज़माएं!

सबस्ट्रिंग, सॉर्ट करता uहै, और स्ट्रिंग के सामने का एक ही लंबाई, t, (एक टुकड़ा का उपयोग कर t[:len(u)]) अगर वे एक ही तो कर रहे हैं Trueवापस आ जाता है, अन्यथा यदि tअभी भी truthy (खाली नहीं) के साथ recurses है एक dequeued t(एक टुकड़ा का उपयोग कर, t[1:]) । यदि tखाली हो andजाता है तो निष्पादित नहीं किया जाता है और यह खाली tलौटा दिया जाता है।


आप लैम्बडा को पैरामीटर के रूप में भी रख सकते हैं: lambda u,t,s=sorted:एक-लाइनर के लिए, कोई भी बाइट नहीं बचा है
रॉड

@ फ़ंक्शन के पुनरावर्ती होने के बाद असाइनमेंट आवश्यक है।
जोनाथन एलन

4

अजगर, 9 बाइट्स

sm}dQ.pE

-1 बाइट के लिए @Erik_the_Outgolfer का धन्यवाद

दो उद्धृत तार लेता है, जिनमें से दूसरा विकल्प है।

कोशिश करो!


ओपी ने कहा कि यह सिर्फ सचाई / झूठी हो सकती है, जरूरी नहीं कि संगत हो, इसलिए आप sइसके बजाय उपयोग कर सकते हैं }1
एरिक आउटगॉल्फ

3

गणितज्ञ, ५५ 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

CJam , 13 12 बाइट्स

le!lf{\#)}:+

इसे ऑनलाइन आज़माएं!

मुझे लगता है कि सीजेएम अन्य गोल्फिंग भाषाओं की तुलना में वास्तव में सीमित है, लेकिन शायद यह सिर्फ मुझे बुरा लग रहा है ...

मैं दूसरे में जाने के बारे में सोच रहा हूं। 05AB1E मजेदार लगता है।

फिक्स्ड छोटे बग को एरिक आउटगॉल्फ कट एक काटने के लिए धन्यवाद क्योंकि गैर-शून्य नंबर सत्य
हैं

स्पष्टीकरण:

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?
आउटगॉल्फ को एरिक करें

@EriktheOutgolfer आप सही हैं। यह of = ० के बजाय
should

1
लेकिन आप कर सकते हैं W>
द एग्रिकॉलफर से एरिक

@ EriktheOutgolfer को le!lf{\#)}:+एक वैध समाधान माना जाएगा? 0यदि स्ट्रिंग नहीं मिली है और कुछ सकारात्मक संख्या है तो इसे आउटपुट करना चाहिए । क्या एक गैर-शून्य संख्या एक वैध है truthy?
फ्रॉडक्यूब

आप उपयोग कर सकते हैं )के बजाय W>ओपी के स्पष्टीकरण के अनुसार,।
एग्रीकल्चर आउटरीक

3

जावा 9 JShell , 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()))

(पठनीयता के लिए डाला गया नया अंक)

इसे ऑनलाइन आज़माएं!

नोट: JShell में डिफ़ॉल्ट रूप से कई आयात शामिल हैं। एक जावा 8 या जावा 9 समाधान के रूप में, आयात करना आवश्यक होगा:

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

अतिरिक्त 45 बाइट्स या 205 बाइट्स के लिए। ऊपर TIO लिंक एक जावा 9 प्रोग्राम के लिए है क्योंकि TIO में वर्तमान में JShell नहीं है (और यह मेरे लिए स्पष्ट नहीं है कि JShell TIO पर कैसे काम करेगा)।


जावा 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++);
        }
}

हाँ, दुर्भाग्य से linq का उपयोग अक्सर चीजों को लंबे समय तक सरल बना देता है (..) {}
Ewan


2

पर्ल 6 , 48 बाइट्स

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

एक विकल्प के रूप में प्रत्येक क्रमचय की उपस्थिति का या-जंक्शन लौटाता है। उदाहरण के लिए, तर्कों "Hello World!"और "d!l"रिटर्न के साथ:

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

... जो Trueएक बूलियन संदर्भ में "ढह जाता है" । यही है, जंक्शन सत्य मूल्य हैं।


2

PHP> = 7.1, 91 बाइट्स

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

परीक्षण के मामलों


1
~$pइसके बजाय प्रयास करें a&$p
टाइटस

जब मैं लिंक का उपयोग करके आपके कोड को चलाने का प्रयास करता हूं तो यह अप्रत्याशित रूप से कहता है,
Notts90

@ Notts90 कृपया 7.1 से अधिक PHP संस्करण का उपयोग करें
Jörg Hülsermann

@ JörgHülsermann जो काम करता है, वह 7.0.3 तक
पहुंच

1

हास्केल, 54 बाइट्स

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

दोनों के लिए और isInfixOfसाथ ही Data.List की शक्ति का उपयोग करना permutations




हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.