क्या स्ट्रिंग X, स्ट्रिंग Y की एक विशेषता है?


23

एक्स और वाई के तारों को देखते हुए, यह निर्धारित करें कि क्या एक्स वाई की एक अनुगामी है। खाली स्ट्रिंग को प्रत्येक स्ट्रिंग के एक अनुवर्ती के रूप में माना जाता है। (जैसे, ''और 'anna'बाद के हैं 'banana')

इनपुट

  • एक्स, एक संभवतः-खाली केस-संवेदनशील अल्फ़ान्यूमेरिक स्ट्रिंग
  • वाई, एक संभवतः-खाली केस-संवेदनशील अल्फ़ान्यूमेरिक स्ट्रिंग

उत्पादन

  • सही या गलत (या समतुल्य), सही ढंग से इंगित करता है कि X, Y का अनुगामी है।

I / O उदाहरण

X      Y        output

''     'z00'    True
'z00'  'z00'    True 
'z00'  '00z0'   False
'aa'   'anna'   True
'anna' 'banana' True
'Anna' 'banana' False

मानदंड

  • सबसे छोटा प्रोग्राम जीतता है, जैसा कि स्रोत कोड के बाइट्स की संख्या से निर्धारित होता है।

उदाहरण कार्यक्रम


1
'केला' का 'एना' मूल क्यों है?
kaoD

4
@kaoD - annaएक परवर्ती (लेकिन प्रतिस्थापन नहीं ) है banana। स्ट्रिंग X स्ट्रिंग Y का एक परिणाम है, यदि X को Y से शून्य या अधिक तत्वों को हटाकर Y से प्राप्त किया जा सकता है; जैसे, को हटाने bऔर दूसरे aसे bananaदेता है anna
रेस

2
यह प्रत्येक स्क्रिप्टिंग भाषा में रेगेक्स की पेशकश के बारे में एक ही समाधान है जो दोनों को देखने के लिए तुच्छ है और आगे गोल्फ के लिए असंभव है।
जॉय

जवाबों:


18

पर्ल 5 , 17 बाइट्स (+1?), पूरा कार्यक्रम

s//.*/g;$_=<>=~$_

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

pध्वज के साथ पर्ल इंटरप्रेटर में शामिल करें, जैसे कि perl -pe 's//.*/g;$_=<>=~$_'। प्रति स्थापित स्कोरिंग नियम जब इस चुनौती मूल रूप से तैनात किया गया था , इस ध्वज एक अतिरिक्त बाइट खर्च होता है। हाल के नियमों , AFAICT के तहत , यह मुफ़्त हो सकता है।

किसी भी तरह से, इनपुट स्ट्रिंग्स को अलग-अलग न्यूलाइन-टर्मिनेटेड लाइनों पर स्टडिन पर आपूर्ति की जानी चाहिए। आउटपुट (स्टडआउट के लिए) होगा 1यदि पहला इनपुट स्ट्रिंग दूसरे का एक विकल्प है, या कुछ भी नहीं है अगर यह नहीं है।

ध्यान दें कि दोनों इनपुट लाइनों के अंत में एक नई रेखा होनी चाहिए, या प्रोग्राम सही ढंग से काम नहीं करेगा। वैकल्पिक रूप से, आप lन्यूलाइन को पर्ल स्ट्रिप बनाने के लिए कमांड लाइन फ्लैग को इनवोकेशन में जोड़ सकते हैं ; प्रभावी रूप से स्कोरिंग नियमों के आधार पर, यह एक अतिरिक्त बाइट खर्च कर सकता है या नहीं कर सकता है। ध्यान दें कि इस ध्वज का उपयोग करने से आउटपुट में एक नई रेखा भी जुड़ जाएगी।

मूल संस्करण (स्निपेट, 18 बाइट्स / वर्ण)

$x=~s//.*/g,$y=~$x

इनपुट को चर में दिया जाता है $xऔर $y, परिणाम अभिव्यक्ति (स्केलर संदर्भ में) का मूल्य है। ध्यान दें कि $xप्रक्रिया में संशोधित किया गया है। (हां, मुझे पता है कि $_इसके बजाय मैं $xचार वर्णों को सहेजने का उपयोग करूंगा, लेकिन ऐसा करना एक स्निपेट में है जो मेरे लिए थोड़ा बहुत स्वादिष्ट लगता है।)

यह कैसे काम करता है?

पहला भाग, प्रत्येक वर्ण के बीच $x=~s//.*/gस्ट्रिंग सम्मिलित करता .*है $x। दूसरा भाग, एक रेक्सक्सप के रूप में $y=~$xव्यवहार करता है $xऔर $yइसके खिलाफ मेल खाता है। पर्ल रीजैक्स में, .*शून्य या अधिक मनमानी पात्रों से मेल खाता है, जबकि सभी अल्फ़ान्यूमेरिक वर्ण आसानी से खुद से मेल खाते हैं।


आउटसाइड (नई?) सर्वसम्मति के अनुसार, सबमिशन प्रोग्राम या फंक्शन होना चाहिए, स्निपेट नहीं। यदि आपका सबमिशन संतुष्ट नहीं है, तो इसे संपादित करने पर विचार करें।
user202729

@ user202729: यह चुनौती उस आम सहमति से काफी पुरानी है, इसलिए जब तक कि इसे पूर्वव्यापी रूप से लागू करने के लिए नहीं माना जाता है, तब तक इस धागे में उत्तर "दादा" होना चाहिए। उन्होंने कहा, मैंने सिर्फ एक संस्करण जोड़ा है जो वर्तमान नियमों का अनुपालन करता है, और। यहां तक ​​कि एक बाइट / चार शार्ट भी हो सकता है (ध्यान दें कि बाइट-आधारित काउंटिंग भी इस चुनौती, AFAIK से नई है) इस बात पर निर्भर करता है कि आप कमांड-लाइन स्विच कैसे गिनते हैं।
इल्मरी करोनें

9

रूबी, 32 अक्षर

s=->x,y{y=~/#{[*x.chars]*".*"}/}

nilयदि xकोई समाधान नहीं है, तो यह समाधान वापस आ जाता है yऔर एक संख्या अन्यथा (यानी माणिक समकक्ष falseऔर true)। उदाहरण:

p s['','z00']        # => 0   (i.e. true)
p s['z00','z00']     # => 0   (i.e. true)
p s['z00','00z0']    # => nil (i.e. false)
p s['anna','banana'] # => 1   (i.e. true)
p s['Anna','banana'] # => nil (i.e. false)

1
मैं मूल रूप से एक ही बात किया था, लेकिन यह बहुत समान है तो मैं इसे पोस्ट नहीं करेंगे। मुझे लगता है कि लैम्बडा को छोड़ना स्वीकार्य है, जो आपको y=~/#{[*x.chars]*".*"}/(23 वर्णों) के साथ छोड़ देगा । चियर्स!
पैट्रिक ऑस्सिटी

1
या यहां तक ​​कि y=~/#{x.split("")*".*"}/(21 वर्ण) :)
पैट्रिक ऑस्सिटी

@ लेपडे स्प्लिट एक वास्तव में 24 वर्ण है।
हावर्ड

1
क्षमा करें, मुझे लगता है कि मैं गलती y=~से irb में इस के साथ काम करते हुए छोड़ दिया ...
पैट्रिक ऑस्सिटी

मेरा संस्करण 2 चार्ट छोटा है।
हौलेथ

7

हास्केल, 51 37

h@(f:l)%(g:m)=f==g&&l%m||h%m;x%y=x<=y

हमार को पर्याप्त सुधार के लिए धन्यवाद। यह अब एक infix फंक्शन है, लेकिन ऐसा नहीं होने की कोई वजह नहीं है।

प्रदर्शन:

GHCi> :{
GHCi| zipWith (%) [""   , "z00", "z00" , "anna"  , "Anna"]
GHCi|             ["z00", "z00", "00z0", "banana", "banana"]
GHCi| :}
[True,True,False,True,False]

चूंकि खाली सूची किसी भी अन्य सूची से छोटी है, इसलिए आप आधार मामलों को सरल बना सकते हैं s x y=x<=y। इसके अलावा, आप इसे ऑपरेटर बनाने और @इसके बजाय -pattern का उपयोग करके कुछ और बचा सकते हैं (f:l)। इसने इसे 37 वर्णों तक h@(f:l)%(g:m)=f==g&&l%m||h%m;x%y=x<=y
घटा दिया

6

पायथन (48 वर्ण)

import re;s=lambda x,y:re.search('.*'.join(x),y)

हावर्ड के रूबी के रूप में एक ही दृष्टिकोण। पायथन पैकेज और उसके "वर्बोज़" को आयात करने की आवश्यकता के बारे में बहुत बुरा है lambda। :-)


1
मैं मानता हूं, लंबोदर क्रिया है।
कैलकुलेटरफाइनल

4

अजगर, 59 अक्षर

def s(x,y):
 for c in y:
  if x:x=x[c==x[0]:]
 return x==""

मुझे लगा कि मेरा जवाब पायथन में बेहतर ढंग से व्यक्त किया जाएगा।

संपादित करें: रिश्तों के सुझावों को जोड़ा गया।


निश्चित रूप से दिया गया है x="a"और y="ab"आप लूप से बाहर निकलेंगे y=="b"और वापस लौटेंगे false?
पीटर टेलर

@PeterTaylor हाँ, मैंने देखा कि जब मैं पोस्ट करने के बाद उदाहरणों को परीक्षण के रूप में चला रहा था कि मैं मिश्रित xऔर yऊपर हूं । मेरे कार्यों yमें बाद की आवश्यकता है x। मुझे लगता है कि मैं किसी भी भ्रम से बचने के लिए उन्हें बेहतर तरीके से बदलूंगा।
गारेथ

आप इसे 59 वर्णों तक प्राप्त कर सकते हैं def s(x,y): for c in y: if x:x=x[c==x[0]:] return x=="":। यह एक टिप्पणी में सही ढंग से प्रदर्शित नहीं करता है, लेकिन मुझे लगता है कि आप देख सकते हैं कि मेरा क्या मतलब है। (इसके अलावा, एक जोड़ा अंतरिक्ष मांगपत्र स्तर को बढ़ाने के लिए पर्याप्त है।)
रेस

@्रेस थैंक्स, पायथन की ऐसी भाषा नहीं है जिसका मैं ज्यादा इस्तेमाल करता हूं जैसा कि आप शायद बता सकते हैं। अच्छी गोल्फिंग। (कोडगॉल्फ उपलेखक के अनुसार 63 वर्ण - यह नए अंक गिनना होगा)।
गारेथ

1
X जा रहा ''से बचाने के लिए और लिखकर कई वर्णों को बचाने के लिए आप विस्तार करने वाले स्लाइसिंग का उपयोग कर सकते हैंx=x[c==x[0:1]:]
Nolen Royalty

4

गोल्फस्क्रिप्ट (22 वर्ण)

X[0]+Y{1$(@={\}*;}/0=!

मान लेता है कि इनपुट को दो पूर्वनिर्धारित चर के रूप में लिया जाता है Xऔर Y, हालांकि यह गोल्फस्क्रिप्ट में असामान्य है। पत्तियां 1सच के लिए या 0स्टैक पर झूठा के लिए।



4

बर्लेस्क (6 वर्ण)

बर्लेस्क में 6 वर्ण: R@\/~[ (x और y मान कर ढेर पर हैं। कार्रवाई में यहां देखें ।)



3

PHP, 90 अक्षर

<?function s($x,$y){while($a<strlen($y))if($y[$a++]==$x[0])$x=substr($x,1);return $x=="";}

आप ifकथन को हटा सकते हैं और इसे सरल कर सकते हैं $x=substr($x,$y[$a++]==$x[0]): ideone.com/Ch9vK
mellamokb

यहाँ भी पुनरावृत्ति का उपयोग करते हुए थोड़ा कम 82-वर्ण समाधान है: ideone.com/IeBns
mellamokb


3

कॉफीस्क्रिप्ट 112 100 95 89

कोड गोल्फ में मेरा पहला प्रयास ... आशा है कि मैं अपने परिवार को शर्मिंदा नहीं करूंगा!

z=(x,y)->a=x.length;return 1if!a;b=y.indexOf x[0];return 0if!++b;z x[1..a],y[b..y.length]

संपादित करें : मुझे पता है कि व्हॉट्सएप के साथ कॉफ़िशस्क्रिप्ट अधिक क्षमाशील है।

इसे थोड़ा चिकना बनाने के लिए कुछ सुझावों के लिए रेस और पीटर टेलर का धन्यवाद


कुछ और चार्ट निम्नानुसार समाप्त किए जा सकते हैं (यह एक टिप्पणी में सही प्रदर्शित नहीं होगा, लेकिन मुझे लगता है कि आप देख सकते हैं कि मेरा क्या मतलब है) z=(x,y)-> a=x.length return 1if a==0 b=y.indexOf x[0] return 0if b<0 z x[1..a],y[b+1..y.length]:। (कुछ ब्राउज़रों में, उदाहरण के लिए, Chrome, आप राइट-क्लिक करके प्रदर्शित कोड को ठीक से देख सकते हैं, फिर तत्व का निरीक्षण कर सकते हैं।)
Res

a.lengthकभी नहीं, नकारात्मक होने जा रहा है, ताकि आप को बदल कर एक चरित्र अधिक बचा सकता है if a==0के साथ if a<1। मुझे नहीं पता कि कॉफीस्क्रिप्ट का टोकन कैसे काम करता है, लेकिन अगर यह if0दो टोकन के रूप में है तो आप दोनों स्थितियों (यानी if1>a) को उलट कर दो और बचा सकते हैं ।
पीटर टेलर

अच्छे अंक। if1>aमान्य नहीं है, लेकिन if!aयह छोटा है! मुझे यह भी एहसास हुआ कि मैं इसे बदलने के b+1लिए एक अतिरिक्त चरित्र को दाढ़ी कर सकता हूं bऔर इसे पिछली पंक्ति में बढ़ा सकता हूं , यह भी उसी ifचाल को संभव बनाता है क्योंकि यह 0 / गैर-0 स्थिति से निपट रहा था।
जॉनो

3

सी #, 70 113 107 90 अक्षर

static bool S(string x,string y){return y.Any(c=>x==""||(x=x.Remove(0,c==x[0]?1:0))=="");}

6
क्या यह एक विकल्प के बजाय एक विकल्प के लिए खोज नहीं है?
गारेथ

हां, मैं गलत समझती हूं। अब तय होना चाहिए।
Mizer

1
लिनक के रूप में मजेदार है, मुझे लगता है कि आप इसके बजाय पुनरावृत्ति का उपयोग करके 10% बचा सकते हैं।
पीटर टेलर

यहाँ मेरा सबसे अच्छा प्रयास है। अब भी लंबा है। static bool S(string x,string y){if(x!=""&&y=="")return false;return x==""||S(y[0]==x[0]?x.Remove(0,1):x,y.Remove(0,1));}
mizer

आप पुनरावर्ती को कम कर सकते हैं x==""||y!=""&&S(...), लेकिन यह अभी भी अपडेटेड Linq संस्करण से अधिक लंबा है। का अच्छा उपयोग Any!
पीटर टेलर

3

गणितज्ञ 19 17 27

LongestCommonSequenceदो तारों के सबसे लंबे समय तक गैर-सन्निहित रिटर्न देता है। (भ्रमित होने की नहीं LongestCommonSubsequence, जो सबसे लंबे समय तक सन्निहित परिणाम लौटाता है।

निम्नलिखित जाँच करता है कि क्या सबसे लंबी सन्निहित परवर्ती दो तारों में से पहली है। (इसलिए आपको बड़ी स्ट्रिंग के बाद आने वाली छोटी स्ट्रिंग दर्ज करनी होगी।)

LongestCommonSequence@##==#& 

उदाहरण

LongestCommonSequence@## == # &["", "z00"]
LongestCommonSequence@## == # &["z00", "z00"]
LongestCommonSequence@## == # &["anna", "banana"]
LongestCommonSequence@## == # &["Anna", "banana"]

सच्चा सच्चा सच्चा झूठा

महत्वपूर्ण परीक्षण तीसरा है, क्योंकि "एना" को "केले" में संक्रामक रूप से समाहित किया गया है।


3

पायथन 3.8 (पूर्व-रिलीज़) , 42 बाइट्स

lambda a,b:''in[a:=a[a[:1]==c:]for c in b]

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

पायथन 3.8 (पूर्व-रिलीज़) , 48 बाइट्स

lambda a,b,j=0:all((j:=1+b.find(c,j))for c in a)

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

पायथन 2 , 48 बाइट्स

lambda a,b:re.search('.*'.join(a),b)>0
import re

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

लिन के इस जवाब से कॉपी किया गया । >0अगर सिर्फ truthy / falsey उत्पादन ठीक है छोड़ा जा सकता है।

अजगर 2 , 50 बाइट्स

f=lambda a,b:b and f(a[a[:1]==b[0]:],b[1:])or''==a

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

अजगर 2 , 50 बाइट्स

lambda a,b:reduce(lambda s,c:s[c==s[:1]:],b,a)==''

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


वालरस का बहुत उपयोग।
जोनाथन एलन

2

C - 74 71 64

यह पीटर टेलर के समाधान को हरा नहीं करता है, लेकिन मुझे लगता है कि यह बहुत मज़ेदार है (प्लस, यह एक पूर्ण कार्य कार्यक्रम है, न कि केवल एक फ़ंक्शन)

main(int c,char**v){for(;*v[1]!=0;++v[1])v[2]+=*v[1]==*v[2];return*v[2];}

main(int c,char**v){for(;*v[1];++v[1])v[2]+=*v[1]==*v[2];return*v[2];}


main(c,v)char**v;{while(*v[1])v[2]+=*v[1]++==*v[2];return*v[2];}

और अपुष्ट:

main(int argc, char** argv){
   char * input = argv[1];
   char * test  = argv[2];

   // advance through the input string. Each time the current input
   // character is equal to the current test character, increment
   // the position in the test string.

   for(; *input!='\0'; ++input) test += *input == *test;

   // return the character that we got to in the test string.
   // if it is '\0' then we got to the end of the test string which
   // means that it is a subsequence, and the 0 (EXIT_SUCCESS) value is returned
   // otherwise something non-zero is returned, indicating failure.
   return *test;
}

इसका परीक्षण करने के लिए आप कुछ ऐसा कर सकते हैं:

./is_subsequence banana anna && echo "yes" || echo "nope"    
# yes
./is_subsequence banana foobar && echo "yes" || echo "nope"    
# nope

!=0एक शर्त में थोड़ा सा वर्बोस है ... प्रोग्राम बनाम फंक्शन एक ऐसी चीज है जिसे प्रश्न को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता है, और यहां यह नहीं है, इसलिए उत्तर अलग-अलग विकल्प लेते हैं।
पीटर टेलर

लानत है, कि !='\0'एक गैर-गोल्फ कोड लिखने से एक बुरी (अच्छी) आदत है, मैंने उस पर्ची को गोल्फ के अपने आखिरी दो दौर में जाने दिया, मुझे भविष्य में और अधिक सावधान रहना होगा। कार्यक्रम बनाम कार्य के रूप में, हां, आप बिल्कुल सही हैं।
गॉर्डन बैली

@GordonBailey टक्कर के लिए खेद है, लेकिन मैंने एक छोटे संस्करण में कुछ बदलाव किए हैं।
ओल्ड्रिनब

2

अजगर, 66 62 59 58 चरस

एक मजेदार समाधान की तरह, निश्चित रूप से एक साफ समस्या।

def f(n,h,r=0):
 for c in h:r+=n[r:r+1]==c
 return r==len(n)

2

रूबी 32 30 28

f=->a,b{b.match a.tr'','.*'}

MatchDataयदि aबाद में bया nilअन्यथा की स्थिति में यह रिटर्न होगा ।

पुराने संस्करण जो बाद के बजाय विकल्प ढूंढते हैं

रूबी १५

f=->a,b{!!b[a]}

का उपयोग करते हुए String#[](str)विधि है कि रिटर्न strअगर strकी सबस्ट्रिंग है selfऔर !!वापस जाने के लिए Booleanअगर दिए गए मान बूलियन के रूप में प्रयोग करने योग्य हो सकता है (और होने की जरूरत नहीं है trueया false) तो यह केवल 13 वर्ण हो सकते हैं:

f=->a,b{b[a]}

nilयदि aइसका विकल्प नहीं है तो यह वापस आ जाएगा b


2
अच्छा है, लेकिन सवाल एक विकल्प के बजाय एक बाद के लिए पूछता है।
गारेथ

2

SWI- प्रोलॉग, SICStus

SICStus की अंतर्निहित विधेय सूची / 2 की जाँच करता है कि क्या पहली सूची की सभी वस्तुएँ दूसरी सूची में भी दिखाई देती हैं। यह विधेय संगतता पुस्तकालय के माध्यम से SWI-Prolog में भी उपलब्ध है, जिसे क्वेरी द्वारा लोड किया जा सकता है [library(dialect/sicstus/lists)].

नमूना रन:

25 ?- sublist("","z00").
true.

26 ?- sublist("z00","z00").
true .

27 ?- sublist("z00","00z0").
false.

28 ?- sublist("aa","anna").
true .

29 ?- sublist("anna","banana").
true .

30 ?- sublist("Anna","banana").
false.

बाइट की गिनती तकनीकी रूप से 0 हो सकती है, क्योंकि हम यहां जो कुछ भी कर रहे हैं वह क्वेरी करना है, बहुत पसंद है कि हम एक प्रोग्राम कैसे चलाते हैं और इसके लिए इनपुट की आपूर्ति करते हैं।


2

PHP, 41 बाइट्स

सच्चे के लिए 1 प्रिंट और झूठ के लिए कुछ भी नहीं

<?=!levenshtein($argv[1],$argv[2],0,1,1);

यदि शब्द 1 से शब्द 2 तक केवल सम्मिलन किया जाता है, तो सच्चे मामलों के लिए गिनती शून्य है

Levenshtein

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

PHP, 57 बाइट्स

सच्चे के लिए 1 प्रिंट और झूठ के लिए 0

रेगेक्स बनाता है

<?=preg_match(_.chunk_split($argv[1],1,".*")._,$argv[2]);

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


1
-2 बाइट्स: प्रमुख .*अनावश्यक है। -2 बाइट्स: के लिए असाइन नहीं $argvहै $a। +25 बाइट्स: array_map(preg_quote())विशेष पात्रों के लिए की जरूरत है (दूसरे preg_quoteपैरामीटर से बचने के लिए कोष्ठक के रूप में कोष्ठक का उपयोग करें ।)
टाइटस

2
@T अग्रणी अग्रणी। * एक खाली स्ट्रिंग के इनपुट के लिए आवश्यक है और इनपुट के लिए मुझे केवल एक संभव-खाली केस-संवेदनशील अल्फ़ान्यूमेरिक स्ट्रिंग को संभालना होगा। यदि विशेष वर्ण हैं तो आप उद्धरण के साथ सही हैं। असाइनमेंट गिनने के लिए धन्यवाद। पहले के समाधान द्वारा कॉपी और पेस्ट करें और इसके बारे में न सोचें
Jörg Hülsermann

1
preg_matchएक खाली रेगेक्स के बारे में तब तक शिकायत नहीं करेंगे जब तक कि सीमांकक नहीं होते। यह बस कुछ भी मैच करेगा। लेकिन प्राग_क्वोट केवल 13: बाइट्स है, न कि 10.0 array_map(preg_quote,str_split(...)):।
टाइटस

1
लेकिन फिर, इनपुट अल्फ़ान्यूमेरिक होने की गारंटी है :) लेकिन आपको अभी भी अग्रणी की आवश्यकता नहीं है .*
टाइटस

2

ब्रेकीलॉग , 2 बाइट्स

⊆ᵈ

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

इस उत्तर के साथ , एक अंतर्निहित विधेय है जो इनपुट और आउटपुट चर के बीच एक संबंध की घोषणा करता है, और एक मेटा-विधेय है जो इसे इनपुट चर के पहले और दूसरे तत्वों के बीच समान संबंध घोषित करने के लिए संशोधित करता है (और एकीकृत करता है) दूसरे तत्व के साथ आउटपुट चर, लेकिन जैसा कि यह एक निर्णय समस्या है जो यहां पर समाप्त नहीं होती है)। X⊆Yएक जोर है कि X, Y का एक परिणाम है, इसलिए ऐसा है [X,Y]⊆ᵈ

यह विधेय (जो निश्चित रूप से सफलता या विफलता के माध्यम से आउटपुट करता है जो प्रिंट करता है true.या false.जब इसे प्रोग्राम के रूप में चलाया जाता है) इनपुट को दो तारों की सूची के रूप में लेता है। यदि इनपुट थोड़ा अधिक लचीला है ...

ब्रेकीलॉग , 1 बाइट

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

इनपुट चर के रूप में स्ट्रिंग X और आउटपुट चर के रूप में स्ट्रिंग Y लेता है। सफलता या विफलता के माध्यम से आउटपुट, पहले की तरह। यदि एक पूर्ण कार्यक्रम के रूप में चलाया जाता है, तो X को इनपुट के रूप में और Y को पहले कमांड लाइन तर्क के रूप में आपूर्ति की जाती है।


1

कॉफ़ीस्क्रिप्ट 73

यहाँ एक वैकल्पिक CoffeeScript उत्तर है, पुनरावृत्ति के बजाय रेगीक्स का उपयोग करना:

z=(x,y)->a='.*';a+=c+'.*'for c in x;b=eval('/'+a+'/');(y.replace b,'')<y

यदि हाइस्टैक सुई से निर्मित एक बहुत लालची रेगेक्स से मेल खाता है, तो इसे एक खाली स्ट्रिंग के साथ बदल दिया जाएगा। यदि यह शुरू होने की तुलना में हिस्टैक छोटा है, तो सुई एक अनुगामी थी।

रिटर्न झूठी जब xऔर yदोनों रिक्त स्ट्रिंग है। लगता है कि हमें एक दार्शनिक की जरूरत है कि हमें बताएं कि क्या एक खाली स्ट्रिंग स्वयं की एक अनुगामी है!

(मेरे पिछले से एक अलग उत्तर के रूप में पोस्ट किया गया क्योंकि यह इसे उचित ठहराने के लिए पर्याप्त अलग लगता है)।


1

पॉवरशेल, 38

$args[1]-clike($args[0]-replace'','*')

बेशक, ऐसे किसी भी regex- या पैटर्न-मिलान-आधारित समाधान में लंबे समय तक तार के साथ गंभीर प्रदर्शन समस्याएं हैं। लेकिन चूंकि छोटापन कसौटी है ...


1

वाई के बाद के सभी उत्पन्न करने वाले एक प्रकार के एंटी-सॉल्यूशन:

अजगर 93

l=len(y)
print x in[''.join(c for i,c in zip(bin(n)[2:].rjust(l,'0'),y)if i=='1')for n in range(2**l)]

1

एपीएल (31)

स्ट्रिंग हैंडलिंग APL में थोड़ी कमी है।

{(⊂'')∊N←⍵↓⍨¨1,⍨=/⊃¨⍵:~×⍴⊃N⋄∇N}

उपयोग:

      {(← '') ←N ⊂ ↓ ⍨¨ ⍨1, / = / ⊃¨⍵: ~ × }N ×N} 'अन्न' 'केला'
1
      {(← '') ∊N ⊂ ↓ ⍨¨ ⍨1, / = / ⊃¨⍵: ~ ×'N ×N} 'अन्ना' 'केला'
0
      {(← '') ←N ⊂ ↓ ⍨¨ ,1, / = / ⊃¨⍵: ~ ×'N ×N} '' 'केला'
1

1

अजगर १३२

दानियारो के समान। सबसे आसान समाधान नहीं है, लेकिन यह कोशिश करने के लिए मजेदार था। मैं पायथन के लिए नया हूं, इसलिए मुझे यकीन है कि अगर मैं थोड़ा और जानता तो मैं इसे छोटा बना सकता था।

def f(i):
    s=x;j=0
    while j<len(s):t=~i%2;s=[s[:j]+s[j+1:],s][t];j+=t;i>>=1
    return s==y
print True in map(f,range(1,2**len(x)))


1

पायथन ( 75 52)

s=lambda a,b:a==''or b>''and s(a[a[0]==b[0]:],b[1:])

सरल पुनरावर्ती समाधान। पहली बार गोल्फिंग, इसलिए इसे नीचे करने के लिए किसी भी सुझाव की बहुत सराहना की जाती है :)

निम्नलिखित के साथ परीक्षण किया गया:

assert s('anna', 'banana') == True
assert s('oo0', 'oFopp0') == True
assert s 'this', 'this is a string') == True
assert s('that', 'this hat is large') == True
assert s('cba', 'abcdefg') == False

कुछ चतुर बूलियन चाल के लिए @lirtosiast को धन्यवाद।


1
आप इसे 52 अक्षरों तक ले जा सकते हैं:s=lambda a,b:a==''or b>''and s(a[a[0]==b[0]:],b[1:])
lirtosiast

धन्यवाद, यह चतुर है, बूलियन को
0/1

1

PHP, 75 65 64 बाइट्स

for(;$p=@strpos(_.$argv[2],$c=$argv[1][$i++],$p+1););echo""==$c;

कमांड लाइन तर्कों से इनपुट लेता है; 1झूठे के लिए सच, खाली स्ट्रिंग के लिए प्रिंट । साथ चलाना -r

स्पष्टीकरण:

  • strposरिटर्न falseअगर सुई $cहिस्टैक $argv[2](स्थिति के बाद $p) में नहीं है,
    जिससे लूप टूट जाता है।
  • strposfalseएक खाली सुई के लिए भी लौटता है , के अंत में लूप को तोड़ता है$argv[1]
  • यदि $argv[1]की एक अनुवर्तीता है $argv[2], $cतो लूप टूटने पर खाली हो जाएगा।
  • strposचेतावनी @को दबाने की जरूरत है Empty needle

+$pइसके बजाय $p+1उस
चिकित्सा के

@ JörgHülsermann +1को हिस्टैक स्ट्रिंग में अग्रिम करने की आवश्यकता है; और अंडरस्कोर $p=-1आरंभीकरण से बचता है। लेकिन ... मैं बच सकता हूं false!==
टाइटस

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