क्या यह दोहराता है?


20

वर्णों की एक स्ट्रिंग दोहराती है अगर इसमें दो लगातार सब्सट्रिंग्स होते हैं जो समकक्ष हैं।

उदाहरण के लिए, 2034384538452दोहराता है क्योंकि इसमें 3845दो बार होता है , लगातार।

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

आपको एक खाली इनपुट कभी नहीं मिलेगा, और सबस्ट्रिंग की लंबाई (यदि यह मौजूद है) 1 या अधिक हो सकती है।

मैं अपने सत्य और झूठे मूल्यों के रूप में यहां 1और 0यहां उपयोग करता हूं, लेकिन आप विभिन्न मूल्यों का उपयोग कर सकते हैं, जब तक कि वे आपकी भाषा में सत्य और झूठे हैं।

उदाहरण:

abcab -> 0
bdefdefg -> 1
Hello, World! -> 1
pp.pp/pp -> 1
q -> 0
21020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120210121020121012021012102012021020121012021012102012101202102012021012102012021020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120210121020120210201210120210201202101210201210120210121020120210201210120210121020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120 -> 0

(अंतिम उदाहरण थु-मोर्स अनुक्रम में प्रत्येक शून्य के बीच की राशि से उत्पन्न हुआ था)


2
क्या मैं असंगत मूल्यों का उपयोग कर सकता हूं, जब तक कि वे अभी भी उचित रूप से सत्य या गलत हैं?
एर्ग आउटफोलर

@EriktheOutgolfer बेशक
Okx

@trichoplax मुझे लगता है कि वह लंबाई के लगातार बाद का मतलब है = = 1.
आउटगोल्फर

@EriktheOutgolfer "लगातार" मेरे द्वारा याद किया गया शब्द था। धन्यवाद - यह अब सही समझ में आता है।
ट्राइकोप्लाक्स

क्या हम सच्चाई के बदले 1 और झूठी के लिए 1 आउटपुट कर सकते हैं?
कृति लिथोस

जवाबों:




7

जेली , 6 5 बाइट्स

Ẇµ;"f

यह एक पूर्ण कार्यक्रम है। TIO अंतिम परीक्षण के मामले को काट-छाँट किए बिना नहीं संभाल सकता।

इसे ऑनलाइन आज़माएं! (अंतिम परीक्षा का मामला 250 अंकों से कम हो गया)

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

Ẇµ;"f  Main link. Argument: s (string)

Ẇ      Words; generate all substrings of s.
 µ     New chain. Argument: A (substring array)
  ;"   Vectorized concatenation; concatenate each substring with itself.
    f  Filter; keep "doubled" substrings that are also substrings.
       This keeps non-empty string iff the output should be truthy, producing
       non-empty output (truthy) in this case and empty output (falsy) otherwise.

5

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

StringMatchQ[___~~x__~~x__~~___]

क्या यह आवश्यक नहीं है कि दोहराए जाने वाले स्ट्रिंग सबसेक्शन आसन्न हों?
डेविड सी

1
@ श्वेतलाना, आप सही हैं! मैंने खाते में abcab-> 0 नहीं लिया था।
डेविड सी

1
StringContainsQ[x__~~x__]और !StringFreeQ[#,x__~~x__]&दोनों छोटे हैं।
नगीनिस


5

05AB1E , 5 बाइट्स

Œ2×åZ

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

सत्य 1 के रूप में आउटपुट 1 और मिथ्या मूल्य के रूप में 0 है

व्याख्या

Œ2×åZ
Œ     # Substrings of input
 2×   # duplicate them (vectorized)
   å  # Is the element in the input? (vectorized)
    Z # Maximum value from list of elements

4

पायथन , 38 बाइट्स

import re
re.compile(r'(.+)\1').search

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

यवन, एक रेगीक्स। जाँचता है कि क्या स्ट्रिंग में एक से अधिक वर्णों की स्ट्रिंग है, .+उसके बाद उसी स्ट्रिंग की जो कि अभी कैप्चर की गई थी। आउटपुट सर्च ऑब्जेक्ट सत्य है यदि कम से कम एक मैच है, जैसा कि चेक किया जा सकता है bool

compileयहाँ उपयोग करने से एक मेमना लिखने से बचाता है:

lambda s:re.search(r'(.+)\1',s)

पायथन , 54 बाइट्स

f=lambda s:s>''and(s in(s*2)[1:-1])|f(s[1:])|f(s[:-1])

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

एक सबस्ट्रिंग की खोज जो कि दो या दो से अधिक समान स्ट्रिंग्स से बना है, जैसा कि अंदर से चेक किया s in(s*2)[1:-1]गया है इस उत्तर दिया गया है । पहले या अंतिम पात्र को काटने के लिए चुनकर पुनरावृत्ति उत्पन्न होती है। यह घातीय है, इसलिए यह बड़े परीक्षण के मामले में कई बार सामने आता है।

ज़रा सी चूक:

f=lambda s,p='':s and(s==p)*s+f(s[1:],p+s[0])+f(s[:-1])
f=lambda s,i=1:s[i:]and(2*s[:i]in s)*s+f(s[1:])+f(s,i+1)

पहले एक पायथन का उपयोग सब्सट्रिंग की inजाँच के लिए करता है , और इसलिए इसे अन्य भाषाओं के लिए अनुकूलित किया जा सकता है।


4

पायथ - 10 9 8 बाइट्स

f}+TTQ.:

सभी दोहराए जाने वाले पदार्थों की सूची लौटाता है (जो यदि कोई नहीं हैं, तो एक खाली सूची है, जो गलत है)

कोशिश करो

स्पष्टीकरण:

f}+TTQ.:
      .:    # All substrings of the input (implicit):
f           # filter the list of substrings T by whether...
  +TT       # ...the concatenation of the substring with itself...
 }   Q      # ...is a substring of the input

1
यदि आप मानते हैं कि इनपुट f}+TTQ.:1 बाइट से उद्धरणों में काम करता है: लिंक
कार्लक्स्टोर





2

PHP, 32 बाइट्स

<?=preg_match('#(.+)\1#',$argn);

साथ पाइप के रूप में चलाएँ -F। क्षमा करें, मैंने देखा था कि आपने वही पोस्ट किया था ।

नॉन-रेगेक्स संस्करण, 84 82 बाइट्स

    for($s=$argn;++$e;)for($i=0;~$s[$i];)substr($s,$i,$e)==substr($s,$e+$i++,$e)&&die

0एक बार के लिए रिटर्न कोड के साथ बाहर निकलता है , और किसी के लिए भी (त्रुटि के साथ बाहर निकलता है)। साथ पाइप के रूप में चलाएँ -nr
मुद्रण योग्य ASCII इनपुट मानता है; किसी भी ASCII के ~साथ बदलें a&


1

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

s=>/(.+)\1/.test(s)

कैसे के बारे में /(.+)\1/.test?
ल्यूक

यही मेरे पास है, @Luke।
झबरा

@ शैग्गी मेरा मानना ​​है कि वह /(.+)\1/.testअपने आप को संपूर्ण रूप में प्रस्तुत करता है।
लीक नून

@ ल्यूक /(.+)\1/.testअनबाउंड है (कोई नहीं है this)। f=/(.+)\1/.test;f('aa')उदाहरण के लिए, काम नहीं करेगा। आप की आवश्यकता होगी/./.test.bind(/(.+)\1/)
Artyer

आप इसके लिए गोल्फ कर सकते हैं: ::/(.+)\1/.test(15 बाइट्स)
डाउनगेट


1

वी , 6 बाइट्स

ø¨.«©±

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

परीक्षण सूट!

यह प्रोग्राम 0फाल्सी वैल्यू के लिए आउटपुट और पॉजिटिव वैल्यू के लिए पॉजिटिव पूर्णांक है।

(ध्यान दें कि वहाँ एक छोटा सा बग था, इसलिए मैं 1 बाइट हासिल करने के लिए किया था। अब बग सुधार के बाद, मुझे बदलने के लिए सक्षम हो जाएगा के साथ \x82)

व्याख्या

ø                     " This is a recent addition to V. This command takes in a regex
                      " and replaces the line with the number of matches of the regex
 ¨.«©±                " The compressed regex. This decompresses to \(.\+\)\1

1

जाप, 8 + 1 = 9 8 बाइट्स

f"(.+)%1

इसे ऑनलाइन आज़माएं । झूठी के nullलिए आउटपुट , और एक सरणी जिसमें सत्य के लिए सभी दोहराए जाने वाले तार हैं।

व्याख्या

 f"(.+)%1
Uf"(.+)%1" # Implicit input and string termination
Uf         # Find in the input
  "(.+)%1" #   a sequence followed by itself
 f         # and return the matched substring
           # output the return value

असंगत आउटपुट मान की अनुमति है ताकि आप èमैचों की संख्या वापस करने और ध्वज को छोड़ने के लिए उपयोग कर सकें ।
झबरा

हाँ। मैं भी मैच को वापस करने के लिए केवल ध्वज को गिरा सकता था, क्योंकि कोई भी मैच नहीं लौटाता null, जो कि मिथ्या है।
ल्यूक

इनपुट के लिए 00, यह आउटपुट करता है 00। क्या आप सुनिश्चित हैं कि यह जाप में सत्य है?
ओकेक्स

@Okx स्ट्रिंग "00"है।
ETHproductions

@Okx; यह कोशिश करो । -Qझंडा "prettyprints" उत्पादन ताकि आप देख सकते हैं कि यह एक एकल स्ट्रिंग वाली एक सरणी है।
झबरा

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