बेस्वाद और अन्य कीड़े


52

मानक एंड्रॉइड कैलकुलेटर ऐप के कुछ संस्करण आपको एक कुंजी दबाने की अनुमति देते हैं, जैसे 'पाप' और फिर इसे 'सी' बनाने के लिए 'डेल' कुंजी। संभवतः सिर्फ एक बग जिसे हटाने के साथ उन्हें परेशान नहीं किया जा सकता है।

Android कैलकुलेटर का स्क्रीनशॉट

निम्नलिखित पत्र / पत्र समूह टाइप कर रहे हैं:

 

पाप
si
रों
क्योंकि
सह
सी
तन
टा
टी
ln
एल
लॉग इन करें
आरे
इ

तो, 'बेस्वाद' टाइप करने योग्य है, क्योंकि टा-स्टेबल और इसलिए 'क्लॉग्स' है क्योंकि 'सी-लॉग-एस'। हालाँकि 'मिला' टाइप करने योग्य नहीं है, न ही 'ए' या 'एक्सज़' है।

एक प्रोग्राम लिखें जो इनपुट के रूप में एकल शब्द (या अक्षरों का अनुक्रम, इनपुट में केवल az) लेता है और यह इंगित करने के लिए आउटपुट उत्पन्न करता है कि कोई शब्द टाइप करने योग्य है या नहीं।

आउटपुट एकल वर्ण / अक्षर / अंक / आदि हो सकता है। या यह बड़ा हो सकता है। सभी टाइप करने योग्य शब्द एक ही आउटपुट का उत्पादन करना चाहिए। सभी गैर-टाइप शब्द भी एक ही आउटपुट का उत्पादन करना चाहिए।

PS जिज्ञासा से बाहर, 'बेस्वाद' सबसे लंबा शब्द है जो टाइप करने योग्य है?


1
बस स्पष्ट होने के लिए: हम शब्द इंगित करने के लिए अपनी पसंद का एक एकल, सुसंगत अंक या अक्षर आउटपुट करते हैं, और शब्द इंगित करने के लिए हमारी पसंद का एक अलग, एकल, सुसंगत अंक या अक्षर टाइप करने योग्य नहीं है। क्या वो सही है?
डेनिस

3
सबसे लंबा शब्द जो मुझे मिल सकता है वह है 10 अक्षर, कोलोस्टैट्स
कॉनर ओ'ब्रायन

1
तो, क्या ",e" एक शब्द नहीं है?
मिस्टर लिस्टर

@ डेनिस हां, कम या ज्यादा।
भूत_न_थे_कोड

1
एक और 11: sissinesses
क्रिस एच

जवाबों:


20

पर्ल, 47 43 41 + 1 = 42 बाइट्स

-4 बाइट्स @ शुनी पुन के लिए धन्यवाद। -2 बाइट्स @Brad Gilbert b2gills और @Downgoat को धन्यवाद

-nझंडे के साथ भागो ।

say!/^(s(in?)?|co?|t(an?)?|ln?|log?|e)+$/

यह निश्चित रूप से वायदा हो सकता है, लेकिन प्रतिस्पर्धा की भावना में, मैं ज्यादातर मूल रेजेक्स को छोड़ रहा हूं जो मैं शुरुआत में आया था। अगर सच्चा है तो कुछ भी नहीं लौटाता 1

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

मैंने एक डिक्शनरी फ़ाइल डाउनलोड की, और मुझे जो सबसे लंबा शब्द मिला, वह था 11 अक्षर - tattletales


1
मुझे लगता है कि co?पर्याप्त होना चाहिए क्योंकि sinध्यान रखना होगा s:) अच्छा खेल रहा है /log?/!
सनी पुन्य

1
यह नहीं कहता कि इसे असंवेदनशील होने (हटाने i) की आवश्यकता है, या कि एकल परिणाम का अर्थ निकालना है (एक को हटा दें !)
ब्रैड गिल्बर्ट b2gills

क्या आपको इनपुट के केवल एज़ होने के बाद ही मुझे बहुत अंत में झंडा चाहिए?
डाउनगेट

आप इसे सरल बना सकते हैं: -2: /^(s|sin?|co?|t|tan?|ln?|log?|e)+$/या यदि आप चाहें तो:/^([celst]|sin?|co|tan?|ln|log?)+$/
नहीं कि

1
अपने इनाम का आनंद लें!
भूत_न_थे_कोड

16

जावास्क्रिप्ट (ईएस 6), 44 बाइट्स

s=>/^((si|ta|l)n?|co?|log?|[ste])+$/.test(s)

मुझे लगता है कि यह सबसे छोटा रेगेक्स संभव है, लेकिन निश्चित रूप से मैं गलत हो सकता हूं।

व्याख्या

शुरू करने के लिए एक स्पष्ट पहला स्थान एक रेगीक्स होगा जिसमें बस सभी विकल्पों को अलग-अलग शामिल किया गया है:

s=>/^(sin|si|s|cos|co|c|tan|ta|t|log|lo|l|ln|e)+$/.test(s)

सबसे पहले, हम यह देख सकते हैं कि cosइसे कैसे बनाया जा सकता है coऔर sइसे अनावश्यक बनाया जा सकता है :

s=>/^(sin|si|s|co|c|tan|ta|t|log|lo|l|ln|e)+$/.test(s)

इनमें से कुछ, जैसे sinऔर si, अंतिम अक्षर को वैकल्पिक बनाकर जोड़ा जा सकता है:

s=>/^(sin?|s|co?|tan?|t|log?|ln?|e)+$/.test(s)

यह काम करता है क्योंकि अंत के साथ या बिना sin?मेल खाता है , इस प्रकार दोनों को कवर करता है और ।sinsinsi

ऐसा लगता है कि बहुत सारे हैं n?। क्या होगा अगर हम उन सभी को एक साथ रखते हैं?

s=>/^((si|ta|l)n?|s|co?|t|log?|e)+$/.test(s)

गोल्फ के लिए एक और तरीका यह है कि शेष सिंगल-चार विकल्पों को एक कैरेक्टर रेंज में संयोजित किया जाए, लेकिन यह एक ही लंबाई में आता है:

s=>/^((si|ta|l)n?|co?|log?|[ste])+$/.test(s)

और यह है कि कैसे आप एक साधारण रेगेक्स गोल्फ। मेरा मानना ​​है कि यह सबसे कम संभव रेगेक्स है जो हर स्ट्रिंग को सही ढंग से मेल खाता है, लेकिन शायद नहीं। मैं इस पुरस्कार में सुधार करने का प्रबंधन करने वाले किसी भी व्यक्ति को +100 का इनाम दूंगा ।


मेरे जवाब में मैंने जो प्रयोग किया है, वह इसी तरह का है:^(s|t|co?|(l|ta|si)n?|log?|e)+$
मामा फन रोल

सबसे पहले, मैं 44 बाइट्स गिनता हूं। दूसरे, यहां एक वैकल्पिक लेकिन लंबा समाधान है / /.test.bind(/^((si|ta|l)n?|co?|log?|[ste])+$/):।
कॉनर ओ'ब्रायन

@ ConorO'Brien वूप्स, पता नहीं कैसे मैंने
मिस किया

आप a=/^((si|ta|l)n?|co?|log?|[ste])+$/;a.test42 बाइट्स के लिए कर सकते हैं । मेरा मानना ​​है कि यह अनुमति है, क्योंकि a.testएक अनाम फ़ंक्शन है।
NoOneIsHere

@SeeOneRhino यह है, लेकिन यह वास्तव में स्वीकार्य f=a.testनहीं है क्योंकि यह काम नहीं करता है। मुझे आश्चर्य है कि अगर यह वैकल्पिक नाम के साथ कॉल करने के लिए स्वीकार्य है a.test...
ETHproductions

7

पायथ, 37 33 29 28 बाइट्स

कोड में एक अनपेक्षित वर्ण है, इसलिए यहां एक xxdहेक्सडंप है।

00000000: 737d 5173 4d5e 733c 5252 6336 2e22 6174  s}QsM^s<RRc6."at
00000010: 14d0 69ba 76f1 ac59 6422 346c            ..i.v..Yd"4l

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

अत्यंत खगोलीय अकुशल। समय और स्थान की जटिलता O (16 n ) O (24 n ) है।

व्याख्या

सबसे पहले, एक Qस्पष्ट रूप से संलग्न है।

s}QsM^s<RRc6."…"4lQ     Implicit: Q = input
            ."…"        Generate "logsincostanlnee"
          c6            Split in 6 parts: ["log", "sin", "cos", "tan", "ln", "ee"]
         R      4       For each n from 0 to 3
       <R               Take the first n chars from each string
      s                 Flatten the results
                 lQ     Get length of input
     ^                  Take that Cartesian power of the list
   sM                   Join each resulting list
 }Q                     Check if the input is found
s                       Cast to integer

ओपी ने स्पष्ट किया है; आप की जरूरत नहीं है s
डेनिस

6

जेली , 32 31 30 28 26 बाइट्स

ŒṖw@€€“¡Ṡ[ẈKœịḲ-¢ȧ?-»’%3ḌẠ

आउटपुट 0 यदि शब्द टाइप करने योग्य है, तो 1 यदि नहीं। 1 बाइट को बंद करने के लिए @JonathanAllan को धन्यवाद!

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

यह काम किस प्रकार करता है

ŒṖw@€€“¡Ṡ[ẈKœịḲ-¢ȧ?-»’%3ḌẠ  Main link. Argument: s (string of lowercase letters)

ŒṖ                          Yield all partitions of s.
      “¡Ṡ[ẈKœịḲ-¢ȧ?-»       Yield "sine  logcostanln". Every third character
                            marks the start of a typeable word.
  w@€€                      Find the indices of all substrings in the partitions
                            in the string to the right (1-based, 0 if not found).
                     ’      Decrement. "Good" indices are now multiples of 3.
                      %3    Modulo 3. "Good" indices are mapped to 0, "bad"
                            indices are mapped to 1 or 2.
                        Ḍ   Convert from decimal to integer. A partition will
                            yield 0 iff all indices are "good".
                         Ạ  All; yield 0 if one or more integers are falsy (0), 1
                            if all integers are truthy (non-zero).

6

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

@Synoli की बदौलत बग फिक्स हुआ।

~c:1a
,"sincostanloglneeee"@6e@[?

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

true.अगर टाइप करने योग्य है या false.नहीं तो आउटपुट ।

व्याख्या

हम इनपुट की डीकोनेटैनेशन की कोशिश करते हैं जब तक कि हम एक को नहीं ढूंढ लेते हैं जिसके लिए हम जो स्ट्रैटन करते हैं उनमें से एक का उपसर्ग है ["sin", "cos", "tan", "log", "lne", "eee]

~c                          A list of strings which when concatenated results in the Input
  :1a                       All strings of this list satisfy the predicate below:

,"sincostanloglneeee"@5           The list ["sin", "cos", "tan", "log", "lne", "eee"]
                       e          Take one element of that list
                        @[?       The input is a prefix of that element

क्यों .के बाद true?
१२:२२ पर कृति लिथोस

1
जब कोई क्वेरी सही होती है तो वह SWI- प्रोलॉग में @KritiiLithos true.और इसके बाद प्रिंट करता false.है। मैंने इसे फिर से लागू किया: यदि आउटपुट को नजरअंदाज किया जाता है (जैसा कि यह यहां है) और इसमें कोई लेखन नहीं है STDOUT, तो यह प्रिंट करेगा true.या false.इस पर निर्भर करेगा कि मुख्य विधेय सफल होता है या विफल। यह SWI- प्रोलॉग में डॉट है क्योंकि true.और false.वास्तव में मान्य प्रोग्राम हैं जो हमेशा सफल होते हैं / हमेशा विफल होते हैं।
घातक

tanसूची में स्पष्ट रूप से प्रदर्शित होने के बिना यह समाधान कैसे काम करता है ?
सिणोली

2
@Synoli यह नहीं है। मैंने इसे 3 बाइट्स की कीमत पर तय किया, धन्यवाद।
घातक

4

पर्ल 6 ,  60 50  44 बाइट्स

पहला प्रयास ( 60 )

put +?(get~~/^<{<sin cos tan ln log e>».&{|m:ex/^.+/}}>*$/)

पर्ल 5 उत्तर का अनुवाद ( 50 )

put +?(get~~/^[s[in?]?|co?|t[an?]?|ln?|log?|e]*$/)

-nस्विच का उपयोग करना ( 43 + 1 )

put +?/^[s[in?]?|co?|t[an?]?|ln?|log?|e]*$/

पहले ?बूलियन के लिए परिणाम बदल देता है, और पहली +(है कि एक नंबर में धर्मान्तरित 1के लिए True, 0के लिए False)


3

गणितज्ञ, 101 बाइट्स

If[StringMatchQ[#,("sin"|"si"|"s"|"cos"|"co"|"c"|"tan"|"ta"|"t"|"ln"|"l"|"log"|"lo"|"e")..],"T","F"]&

ऐसा लगता है कि इस चुनौती के कठिन हिस्से सबसे कम रेगेक्स के साथ आ रहे हैं और रेगेक्स से मिलान करने के लिए सबसे संक्षिप्त भाषा का चयन करते हैं। मेरे पास पूर्व में योगदान करने के लिए कुछ भी नहीं है, और गणितज्ञ बाद के लिए अच्छा उम्मीदवार नहीं है क्योंकि आपको उपयोग करना है StringMatchQऔर RegularExpression। मैं आपके PS का उत्तर क्या कर सकता हूं: "बेस्वाद" सबसे लंबा शब्द है जिसे आप टाइप कर सकते हैं?

In[1]:= f=StringMatchQ[#,("sin"|"si"|"s"|"cos"|"co"|"c"|"tan"|"ta"|"t"|"ln"|"l"|"log"|"lo"|"e")..]&;

In[2]:= Select[EntityList@"Word",f@#[[2,1]]&][[All,2,1]]//SortBy[StringLength]//DeleteDuplicates
Out[2]= {c,e,l,s,t,cc,cl,el,et,lo,si,sl,ta,te,ccc,col,cos,cot,eel,ell,eta,etc,lee,let,log,lot,sec,see,set,sic,sin,sit,tae,tan,tat,tec,tee,cell,clog,clot,coco,cole,colt,coss,cost,cote,else,less,loco,loge,loll,lose,loss,lota,sect,seel,sell,sess,seta,sett,sill,silo,silt,sine,sise,siss,site,sloe,slog,slot,stet,taco,tact,tael,talc,tale,tall,tect,tell,test,cello,close,cosec,costa,cotan,eccle,elect,elsin,ettle,loess,lotte,secle,setee,since,sleet,stale,stall,state,steel,stele,tasse,taste,tatee,teest,telco,testa,tetel,tsine,cellco,closet,coleta,collet,coltan,cosine,cosset,costal,ecesis,estate,lessee,scelet,select,sellee,sestet,settee,settle,siesta,silole,stacte,stance,stasis,tallet,tallot,taslet,tassel,tasset,tattle,tectal,teetan,tellee,testee,tsetse,celesta,cessile,cocotte,collect,costate,ecolect,ectasis,electee,sessile,sinless,sitelet,statant,tassell,tastant,testate,coestate,colessee,colocolo,cosiness,costless,electant,lossless,sceletal,siletane,statelet,tactless,tallness,telltale,telocoel,coelostat,sissiness,stateless,tasteless,tattletale}

इसलिए "टैटलेटेल" एक चरित्र द्वारा सबसे लंबा लगता है।


यह गैर-प्रतिस्पर्धा क्यों है? समारोह है आप चुनौती के नियमों का पालन नहीं परिभाषित?
डेनिस

नहीं, यह आउटपुट Trueया Falseएकल चरित्र के बजाय।
ngenisis

निर्णय-समस्या के साथ टैग की गई पोस्ट ट्रू / फाल्स के निर्धारण के बारे में हैं, इसलिए मुझे लगता है कि यह प्रतिस्पर्धा है।
फ्लिपकैक

गैर-प्रतिस्पर्धात्मक स्थिति उन सबमिशन के लिए आरक्षित है जो एक भाषा या भाषा की सुविधा का उपयोग करते हैं जो मौजूद नहीं था या चुनौती पोस्ट किए जाने पर बग था।
डेनिस

काफी उचित। मैंने वास्तविक समाधान के लिए अपने उत्तर को संपादित किया।
ngenisis

2

आश्चर्य है , 41 बाइट्स

!.(mstr"^(s|t|co?|(l|ta|si)n?|log?|e)+$")

उपयोग:

(!.(mstr"^(s|t|co?|(l|ta|si)n?|log?|e)+$")) "tasteless"

पहले प्रश्न को गलत समझा, लेकिन अब यह सब तय हो गया है। Fमैच के लिए आउटपुट और Tबिना मैच के।

नॉनकंपेटिंग, 35 बाइट्स

!.`^(s|t|co?|(l|ta|si)n?|log?|e)+$`

उपयोग:

(!.`^(s|t|co?|(l|ta|si)n?|log?|e)+$`) "tasteless"

यह लागू रेगेक्स का उपयोग करता है, जिसे इस चुनौती के बाद लागू किया गया था।


2
मेरी समझ से, आप केवल कैलकुलेटर के अंतिम वर्ण, जिसका अर्थ है हटा सकते हैं n, लेकिन typable नहीं sinऔर lnकर रहे हैं।
सनी पुन्य

यह रेगेक्स saसच के रूप में पता लगाता है
कृति लिथोस

1
यह परीक्षण के मामले में विफल रहता है got
डेनिस

मुझे विश्वास है कि यह तय हो गया है।
मामा फन रोल 16

?उप अभिव्यक्ति विनम्र बनाने के; rexegg.com/regex-quantifiers.html#cheat_sheet देखें । लेकिन यहां तक ​​कि यह किसी कारण से (कम से कम PHP में) काम नहीं करता है ??या इसके साथ लालची है ?+coelostatsट्रैप (पर loऔर ta) को ट्रिगर करता है ।
टाइटस

2

प्रसंस्करण, 223 बाइट्स

int d(String b){for(String p:"tan0log0sin0cos0ln0e".split("0"))if(p.startsWith(b))return 1;return 0;}

int l(String p){String b="";int t=1;for(char c:p.toCharArray()){b+=c;if(d(b)<1){b=c+"";t=d(b);}if(t<1)return t;}return t;}

अंत में रेगेक्स के बिना एक उत्तर देने का फैसला किया। फ़ंक्शन को कॉल करने के लिए, उपयोग करें l("tasteless");। रिटर्न 0झूठी के लिए और 1सच के लिए।

स्पष्टीकरण के साथ विस्तारित कोड

int d(String b){
  for(String p:"tan0log0sin0cos0ln0e".split("0"))
    if(p.startsWith(b))
      return 1;
  return 0;
}
//main function
int l(String p){
  String b="";
  int t=1;
  for(char c:p.toCharArray()){
    b+=c;
    if(d(b)<1){
      b=c+"";
      t=d(b);
    }
    if(t<1)return t;
  }
  return t;
}

मूल रूप से, हम दिए गए स्ट्रिंग पर पुनरावृति करते हैं, bचार द्वारा चार का निर्माण करते हैं । हम का उपयोग कर जाँच d()करता है, तो के किसी भी tan, log... के साथ शुरू b। यदि ऐसा होता है, तो यह मान्य है। और, हम जाँचते हैं कि क्या उस स्थिति में चार वैध है और हम रीसेट करते हैं b। अब यदि यह अमान्य है, 0तो वापस कर दिया जाएगा, अन्यथा यह अभी भी मान्य होगा। अंत में, यदि प्रोग्राम पहले से ही कुछ वापस नहीं आया है, तो वापस लौटें 1


dफ़ंक्शन वापस नहीं आ सकता है bool?
रोमन ग्रैफ

@ RomanGräf यह उपयोग करने के लिए अधिक बाइट्स booleanहै int। इसके अलावा trueऔर falseअधिक बाइट्स की आवश्यकता होती है 1और0
क्रिक्टी लिथोस

2

स्काला, 49 बाइट्स

s=>s.matches("(s(in?)?|co?|t(an?)?|ln?|log?|e)+")

सही है अगर दिए गए स्ट्रिंग regex से मेल खाता है, तो गलत है।


2

पायथन 3 , 154 बाइट्स

r=1;i=input()
while r:
 r=0
 for s in'sin,cos,tan,log,ln,co,lo,si,ta,s,c,t,l,e'.split(','):
  if i.startswith(s):r=i=i.replace(s,'',1);break
print(i=='')

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


1
आपको इंडेंटेशन की जांच करने की आवश्यकता हो सकती है, मुझे इसे काम करने के लिए कोड को संपादित करना था
जॉर्ज

@ घेरा, अजीब, मैं IDLE और ऑनलाइन संकलक में कोशिश की, और दोनों काम करने लगते हैं
हेनके

2

पायथन 3 , 149 130 बाइट्स

i=input()
for a in 'tan,sin,cos,log,si,co,ta,lo,lo,ln,s,c,t,l,e'.split(','):
    if a in i:
        i=i.replace(a,"")
print(not i)

# 1 संपादित करें: @Henke समाधान का उपयोग करके 19 बाइट्स मुंडा


0

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

f=lambda w:any(f(w[len(s):])if w[:len(s)]==s else 0for s in'sin,cos,tan,log,ln,co,lo,si,ta,s,c,t,l,e'.split(','))if w else 1

0

PHP, 60 बाइट्स

<?=preg_match("#^((si|ta|l)n?|co?|log?|s|e|t)+$#",$argv[1]);

ETHproductions से चोरी regex :
कमांड लाइन तर्क से इनपुट लेता है; 1टाइप करने योग्य के लिए प्रिंट , टाइप करने योग्य 0नहीं के लिए।

पुराने संस्करण, 75 73 69 बाइट्स

<?=!preg_replace("#co|log|ln|lo|sin|si|tan|ta|[celst]#","",$argv[1]);

रिक्त स्ट्रिंग के साथ सभी संभव शब्दों को बदलता है, परिणाम लौटाता है, उपेक्षा करता है।

<?=!preg_split("#co|log|ln|lo|sin|si|tan|ta|[celst]#",$argv[1],-1,1);

रेगेक्स मैचों द्वारा इनपुट विभाजन। ध्वज 1खड़ा है PREG_SPLIT_NO_EMPTYऔर preg_splitकेवल गैर-रिक्त परिणामों को वापस करने के लिए कहता है। यदि इनपुट टाइप करने योग्य है, preg_splitतो केवल खाली परिणाम होंगे, इसलिए यह एक खाली सरणी लौटाएगा, जो गलत है। !परिणाम को नकारता है।

दोनों संस्करण कमांड लाइन तर्क से इनपुट लेते हैं
और प्रिंट करते हैं 1यदि परिणाम खाली है (इनपुट टाइप करने योग्य है), और कुछ नहीं।

नोट:
रेग्क्स का उपयोग करके पैकिंग ?करना यहां काम नहीं करता है; यह भावों को असहनीय बनाता है; शायद बैकट्रैकिंग के कारण। और विकल्प का क्रम महत्वपूर्ण है: taपहले खड़ा होना पड़ता है tया जब यह पता चलता है तो इंजन मिलान बंद कर देगा t

मुझे एक क्वांटिफायर चीट शीट मिली , सोचा ??या ?+मदद मिल सकती है; लेकिन उन्होंने मेरे लिए काम नहीं किया।


0

जावा 8, 55 बाइट्स

s->return s.matches("^((si|ta|l)n?|co?|log?|[ste])+$");

विस्मयादिबोधक : मैंने ETHproductions ' regex का उपयोग किया क्योंकि यह कई बाइट्स से छोटा था। Regex पर उसे पूरा श्रेय। मैंने जो किया, उसे एक जावा फ़ंक्शन बनाने के लिए 24 बाइट्स जोड़े गए।

रिटर्न falseअगर शब्द रेगेक्स में फिट नहीं हुआ, तो true

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