एक अच्छी तरह से जुड़ी चुनौती


40

एक गतिविधि जो मैं कभी-कभी करता हूं, जब मैं ऊब जाता हूं तो मेल खाने वाले जोड़े में कुछ पात्रों को लिखना है। फिर मैं इन पात्रों को जोड़ने के लिए लाइनें (ऊपर से नीचे कभी नहीं) खींचता हूं। उदाहरण के लिए, मैं लिख सकता और फिर मैं लाइनों को इस प्रकार :abcbac

पहला लिंक

या मैं लिख सकताabbcac

दूसरा लिंक

एक बार जब मैंने इन पंक्तियों को खींचा तो मैं चंक्स के चारों ओर बंद छोरों को खींचने की कोशिश करता हूं ताकि मेरा लूप किसी भी रेखा को काट न सके, जिसे मैंने अभी-अभी खींचा है। उदाहरण के लिए, पहले एक में केवल एक लूप जिसे हम आकर्षित कर सकते हैं वह पूरी चीज़ के आसपास है, लेकिन दूसरे में हम सिर्फ एस (या बाकी सब) के चारों ओर एक लूप आकर्षित कर सकते हैंb

लूप ड्रा

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

ध्यान दें कि कुछ तारों को कई तरीकों से खींचा जा सकता है। उदाहरण के लिए को निम्नलिखित दोनों तरीकों से तैयार किया जा सकता है (और तीसरा शामिल नहीं):bbbb

रास्ता 1 या रास्ता २

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

कार्य

आपका काम अच्छी तरह से जुड़े तार की पहचान करने के लिए एक कार्यक्रम लिखना है। आपके इनपुट में एक स्ट्रिंग शामिल होगी जहां हर वर्ण एक समान संख्या में दिखाई देता है, और आपका आउटपुट दो अलग-अलग संगत मूल्यों में से एक होना चाहिए, एक अगर तार अच्छी तरह से जुड़ा हुआ है और दूसरा अन्यथा।

इसके अलावा आपका कार्यक्रम एक अच्छी तरह से जुड़ा हुआ स्ट्रिंग अर्थ होना चाहिए

  • आपके कार्यक्रम में हर वर्ण एक समान बार दिखाई देता है।

  • यह सत्य मूल्य का उत्पादन करना चाहिए जब खुद को पारित कर दिया।

आपका प्रोग्राम मुद्रण योग्य ASCII या अपने स्वयं के कार्यक्रम के पात्रों से मिलकर किसी भी स्ट्रिंग के लिए सही उत्पादन करने में सक्षम होना चाहिए। प्रत्येक वर्ण के साथ कई बार दिखाई देता है।

उत्तर बाइट्स में उनकी लंबाई के रूप में कम बाइट्स के साथ एक बेहतर स्कोर होगा।

संकेत

एक स्ट्रिंग अच्छी तरह से जुड़ा हुआ नहीं है अगर एक सन्निहित गैर-खाली सख्त विकल्प मौजूद है, तो प्रत्येक वर्ण उस विकल्प में एक समान संख्या में दिखाई देता है।

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

abcbac -> True
abbcac -> False
bbbb -> False
abacbc -> True
abcbabcb -> True
abcbca -> False

1
टेस्ट मामला: abcbca -> False
अर्जन जोहानसन

मुझे लगता है कि आपके संकेत में एक शानदार है there
जोनाथन फ्रीच

2
तो स्पष्ट होने के लिए: क्या एक स्ट्रिंग में कुल वर्णों की संख्या सम है, चाहे वह एक अच्छी तरह से जुड़ा हुआ स्ट्रिंग है। यह आवश्यकता केवल कार्यक्रमों के स्रोत कोड पर लागू होती है। यह निश्चित रूप से केवल शब्दार्थ का विषय है, क्योंकि किसी भी वर्ण की विषम कुल संख्या (और कम से कम एक प्रस्तुत कार्यक्रम इसका लाभ उठाता है) के लिए इनपुट किए गए तारों के लिए अपरिभाषित व्यवहार करने के लिए कार्यक्रमों की अनुमति है।
डेडकोड

इनपुट में किस प्रकार के वर्ण हो सकते हैं?
xnor

@xnor मैंने इसे चुनौती में जोड़ा। उम्मीद है कि यह स्पष्ट करता है।
गेहूं जादूगर

जवाबों:


19

रेगेक्स (ECMAScript 2018 या .NET), 140 126 118 100 98 82 बाइट्स

^(?!(^.*)(.+)(.*$)(?<!^\2|^\1(?=(|(<?(|(?!\8).)*(\8|\3$){1}){2})*$).*(.)+\3$)!?=*)

यह 98 बाइट संस्करण की तुलना में बहुत धीमा है, क्योंकि ^\1लुकहैड से बचा हुआ है और इसके बाद इसका मूल्यांकन किया जाता है। एक सरल स्विचरू के लिए नीचे देखें जो गति को पुन: प्राप्त करता है। लेकिन इसके कारण, नीचे दिए गए दो TIO पहले की तुलना में एक छोटे परीक्षण मामले को पूरा करने तक सीमित हैं, और .NET एक अपने स्वयं के regex की जांच करने के लिए बहुत धीमा है।

इसे ऑनलाइन आज़माएं! (ECMAScript 2018)
इसे ऑनलाइन आज़माएं! (.NET)

18 बाइट्स (118 → 100) को छोड़ने के लिए, मैंने बेशर्मी से नील के रेगेक्स से एक बहुत अच्छा अनुकूलन चुरा लिया है जो नकारात्मक लुकबाइंड के अंदर एक लुकहेड लगाने की आवश्यकता से बचाता है (80 बाइट अप्रतिबंधित रेगेक्स की उपज)। धन्यवाद, नील!

यह अप्रचलित हो गया जब यह एक अविश्वसनीय 16 और बाइट्स (98 → 82) को गिरा दिया, जो कि जयता के विचारों के लिए धन्यवाद था, जिसके कारण 69 बाइट अप्रतिबंधित रेगेक्स हो गए! यह बहुत धीमा है, लेकिन यह गोल्फ है!

ध्यान दें कि (|(रेगेक्स को अच्छी तरह से जोड़ने के लिए नो-ऑप्स का परिणाम है। यह बहुत धीमी गति से मूल्यांकन करता है। ईसीएमएस्क्रिप्ट में उनका यह प्रभाव नहीं है क्योंकि शून्य-चौड़ाई वैकल्पिक मैचों को गैर-मैचों के रूप में माना जाता है

ECMAScript मात्राओं पर प्रतिबंध लगाता है, इसलिए यह आवश्यकताओं को और अधिक सख्त बनाता है। हालाँकि, इस बिंदु पर यह इतनी अच्छी तरह से गोल्फ है कि मुझे नहीं लगता कि उस विशेष प्रतिबंध को उठाने से कोई और गोल्फिंग संभावनाएं खुलेंगी।

अतिरिक्त वर्णों के बिना इसे प्रतिबंध ( 101 69 बाइट्स) पास करने की आवश्यकता है :

^(?!(.*)(.+)(.*$)(?<!^\2|^\1(?=((((?!\8).)*(\8|\3$)){2})*$).*(.)+\3))

यह धीमा है, लेकिन यह सरल संपादन (सिर्फ 2 अतिरिक्त बाइट के लिए) सभी खोई हुई गति और अधिक प्राप्त करता है:

^(?!(.*)(.+)(.*$)(?<!^\2|(?=\1((((?!\8).)*(\8|\3$)){2})*$)^\1.*(.)+\3))

^
(?!
    (.*)               # cycle through all starting points of substrings;
                       # \1 = part to exclude from the start
    (.+)               # cycle through all ending points of non-empty substrings;
                       # \2 = the substring
    (.*$)              # \3 = part to exclude from the end
    (?<!               # Assert that every character in the substring appears a total
                       # even number of times.
        ^\2            # Assert that our substring is not the whole string. We don't
                       # need a $ anchor because we were already at the end before
                       # entering this lookbehind.
    |                  # Note that the following steps are evaluated right to left,
                       # so please read them from bottom to top.
        ^\1            # Do not look further left than the start of our substring.
        (?=
            # Assert that the number of times the character \8 appears in our
            # substring is odd.
            (
                (
                    ((?!\8).)*
                    (\8|\3$) # This is the best part. Until the very last iteration
                             # of the loop outside the {2} loop, this alternation
                             # can only match \8, and once it reaches the end of the
                             # substring, it can match \3$ only once. This guarantees
                             # that it will match \8 an odd number of times, in matched
                             # pairs until finding one more at the end of the substring,
                             # which is paired with the \3$ instead of another \8.
                ){2}
            )*$
        )
        .*(.)+         # \8 = cycle through all characters in this substring
        # Assert (within this context) that at least one character appears an odd
        # number of times within our substring. (Outside this negative lookbehind,
        # that is equivalent to asserting that no character appears an odd number
        # of times in our substring.)
        \3             # Skip to our substring (do not look further right than its end)
    )
)

मैंने इसे आणविक लुकहेड ( 103 69 बाइट्स) का उपयोग करके इसे चर-लंबाई के लुकअप में बदलने से पहले लिखा था:

^(?!.*(?*(.+)(.*$))(?!^\1$|(?*(.)+.*\2$)((((?!\3).)*(\3|\2$)){2})*$))

^
(?!
    .*(?*(.+)(.*$))       # cycle through all non-empty substrings;
                          # \1 = the current substring;
                          # \2 = the part to exclude from the end
    (?!                   # Assert that no character in the substring appears a
                          # total even number of times.
        ^\1$              # Assert that our substring is not the whole string
                          # (i.e. it's a strict substring)
    |
        (?*(.)+.*\2$)    # \3 = Cycle through all characters that appear in this
                          # substring.
        # Assert (within this context) that this character appears an odd number
        # of times within our substring.
        (
            (
                ((?!\3).)*
                (\3|\2$)
            ){2}
        )*$
    )
)

और अपने रेगेक्स को अच्छी तरह से जोड़ने में सहायता करने के लिए, मैं उपरोक्त रेगेक्स की भिन्नता का उपयोग कर रहा हूं:

(?*(.+)(.*$))(?!^\1$|(?*(.)+.*\2$)((((?!\3).)*(\3|\2$)){2})*$)\1

जब इसका उपयोग किया जाता है regex -xml,rs -o, तो यह इनपुट के एक सख्त विकल्प की पहचान करता है जिसमें हर वर्ण की एक समान संख्या होती है (यदि कोई मौजूद है)। निश्चित रूप से, मैं ऐसा करने के लिए एक गैर-रेगेक्स कार्यक्रम लिख सकता था, लेकिन इसमें मज़ा कहाँ होगा?


8
wtf अभी भी गोल्फ हो रहा है
केवल

@ ASCII- केवल और अभी भी गोल्फ हो रहा है ...
Quintec

11

जेली, 20 बाइट्स

ĠẈḂẸẆṖÇ€Ạ
ĠẈḂẸ
ẆṖÇ€Ạ

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

पहली पंक्ति को अनदेखा किया जाता है। यह केवल इस शर्त को पूरा करने के लिए है कि हर वर्ण एक समान संख्या में दिखाई दे।

अगली पंक्ति पहले Ġउनके मूल्य से सूचकांकों को रोकती है। यदि हम परिणामस्वरूप सूची में प्रत्येक सबलिस्ट की लंबाई लेते हैं ( ), तो हमें प्रत्येक वर्ण के प्रकट होने की संख्या मिलती है। यह जाँचने के लिए कि क्या इनमें से कोई भी गैर-समान है, हम प्रत्येक गणना के अंतिम अंक को प्राप्त करते हैं और पूछते हैं कि क्या सत्य (गैर-शून्य) मान है।

इसलिए, यह सहायक लिंक लौटाता है कि क्या एक सबरिंग को परिचालित नहीं किया जा सकता है।

मुख्य लिंक में, हम इनपुट के सभी सब्सट्रेटिंग लेते हैं ( ), पिछले एक पर ऑप (ताकि हम यह जांच न करें कि क्या पूरे स्ट्रिंग को सर्कुलेट किया जा सकता है), और हेल्टर लिंक ( Ç) को एसई सबस्ट्रिंग पर चलाएं । इसका परिणाम यह है कि क्या ll सबस्टिट्यूटिंग को परिचालित नहीं किया जा सकता है।


तो, हाँ, यह मेरी समाधान भी होगा, लेकिन, दुर्भाग्य से, यह उबाऊ है ... :(
एरिक Outgolfer

8

जे , 34 बाइट्स

2:@':.,|~*'>1(#.,)*/@(1>2|#/.~)\.\

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

-8 बाइट्स FrownyFrog के लिए धन्यवाद

मूल

जे , 42 बाइट्स

(*#'.,012&|@~#')=1#.[:,([:*/0=2&|@#/.~)\.\

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

व्याख्या

(*#'.,012&|@~#') = 1 #. [: , ([: */ 0 = 2&|@#/.~)\.\

(*#'.,012&|@~#')                                       NB. this evaluates to 1
                                                       NB. while supplying extra
                                                       NB. chars we need.  hence...
                 =                                     NB. does 1 equal...
                   1 #.                                NB. the sum of...
                        [: ,                           NB. the flatten of...
                             (                  )\.\   NB. the verb in parens applied
                                                       NB. to every suffix of every
                                                       NB. prefix, ie, all contiguous 
                                                       NB. substrings
                             ([: */ 0 = 2&|@#/.~)      NB. def of verb in paren:
                                             /.~       NB. when we group by each
                                                       NB. distinct char...
                              [: */                    NB. is it the case that
                                                       NB. every group...
                                           @#          NB. has a length...
                                    0 = 2&|            NB. divisible by 2...

1
@Deadcode चूंकि प्रत्येक स्ट्रिंग के लिए पूरे स्ट्रिंग के लिए विपरीत परीक्षण करने के लिए उस मात्रा को संभालने के बाद, यह एक सुरक्षित शर्त लगती है कि अधिकांश समाधान इसे छोड़ देंगे। इसके साथ परीक्षण abc, केवल पर्ल प्रविष्टि इस पर "विफल" नहीं होती है। (हालांकि इसकी अन्य समस्याएं हैं।)
अर्जन जोहान्सन

1
@ OodrjanJohansen आपने गलत समझा। मैंने कहा कि किसी भी वर्ण की विषम कुल संख्या के साथ तार (जो केवल कार्यक्रमों के स्रोत कोड को अयोग्य घोषित करता है, न कि अच्छी तरह से जुड़े तार) को अच्छी तरह से जोड़ा जा सकता है, और यह कार्यक्रम उन कुछ अच्छी तरह से जुड़े तार के लिए गलत तरीके से लौटता है। प्रश्न स्पष्ट रूप से इस अपरिभाषित व्यवहार की अनुमति देता है, इसलिए कार्यक्रम मान्य है। योना, मुझे लगता है कि यह वास्तव में दिलचस्प है कि आपका कार्यक्रम ऐसा करता है और मैं प्रशंसा करता हूं कि आपने एक तरीका निकाला है जो इस तरह से काम करता है। मुझे एक स्पष्टीकरण अच्छा लगेगा। इस तरह की प्रोग्रामिंग मेरे लिए पूरी तरह से विदेशी है इसलिए मैं टिप्पणियों और कोड को नहीं समझता हूं।
9

1:@':.,02|~*'=1(#.,)*/@(0=2|#/.~)\.\
FrownyFrog

1
2:@':.,|~*'>1(#.,)*/@(1>2|#/.~)\.\भी मान्य लगता है
FrownyFrog

6

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

lambda l,b={id}:len({str(b:=b^{c})for(c)in l})<len(l)#,<^fmnost{}#

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

असाइनमेंट एक्सप्रेशंस का युग हम पर है। Python 3.8 में शामिल PEP 572 के साथ , गोल्फिंग कभी भी समान नहीं होगी। आप यहां शुरुआती डेवलपर पूर्वावलोकन 3.8.0a1 स्थापित कर सकते हैं

असाइनमेंट एक्सप्रेशंस आपको :=उस वैल्यू का मूल्यांकन करते हुए एक वैरिएबल इनलाइन को असाइन करने के लिए उपयोग करते हैं। उदाहरण के लिए, (a:=2, a+1)देता है (2, 3)। यह निश्चित रूप से पुन: उपयोग के लिए चर को स्टोर करने के लिए उपयोग किया जा सकता है, लेकिन यहां हम एक कदम आगे जाते हैं और इसे एक समझ के रूप में संचयकर्ता के रूप में उपयोग करते हैं।

उदाहरण के लिए, यह कोड संचयी रकम की गणना करता है [1, 3, 6]

t=0
l=[1,2,3]
print([t:=t+x for x in l])

ध्यान दें कि सूची समझ के माध्यम से प्रत्येक कैसे गुजरता है, संचयी योग tद्वारा बढ़ाया जाता है xऔर नए मूल्य को समझ द्वारा निर्मित सूची में संग्रहीत किया जाता है।

इसी तरह, b:=b^{c}वर्णों के सेट को अपडेट करें bकि क्या यह वर्ण शामिल है c, और नए मान का मूल्यांकन करता है b। तो, कोड [b:=b^{c}for c in l]वर्णों पर पुनरावृत्ति करता cहै lऔर प्रत्येक गैर-खाली उपसर्ग में विषम संख्या में देखे गए वर्णों के सेट को संचित करता है।

यह सूची डुप्लिकेट के लिए जाँच की जाती है, बजाय इसके कि इसे एक समझ बनाकर देखें कि क्या इसकी लंबाई इससे छोटी है s, जिसका अर्थ है कि कुछ दोहराव ढह गए थे। यदि हां, तो रिपीट का अर्थ है कि sउन समयों के बीच देखे जाने वाले हिस्से में हर वर्ण संख्याओं का समान रूप से सामना करता है, जिससे स्ट्रिंग गैर-अच्छी तरह से जुड़ी होती है। अजगर बिना सोचे समझे सेट के सेट की अनुमति नहीं देता है, इसलिए इनर सेट को इसके बजाय स्ट्रिंग्स में बदल दिया जाता है।

सेट bको एक वैकल्पिक तर्क के रूप में आरंभीकृत किया जाता है, और सफलतापूर्वक कार्य क्षेत्र में संशोधित किया जाता है। मैं चिंतित था कि यह फ़ंक्शन को गैर-पुन: प्रयोज्य बना देगा, लेकिन यह रन के बीच रीसेट करने लगता है।

स्रोत प्रतिबंध के लिए, अनपेक्षित वर्ण अंत में एक टिप्पणी में भरे हुए हैं। मुफ्त के लिए अतिरिक्त पार्सलों को रद्द करने के for(c)in lबजाय लिखना for c in l। हमने idप्रारंभिक सेट में रखा b, जो हानिरहित है क्योंकि यह किसी भी सेट के रूप में शुरू हो सकता है, लेकिन खाली सेट को {}इसलिए नहीं लिखा जा सकता क्योंकि पायथन एक खाली शब्दकोष बना देगा। चूँकि अक्षर iऔर dजोड़ियों की ज़रूरत होती है, इसलिए हम idवहाँ फंक्शन डाल सकते हैं ।

ध्यान दें कि कोड नेगेटिव बूलियन्स को आउटपुट करता है, इसलिए यह सही ढंग Falseसे खुद को देगा।



5

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

bmn0=f=lambda s,P={0},d=[]:s<" "if(P in d)else+f(s[f<s:],P^{s[0^0]},[P]+d)

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

स्ट्रिंग के माध्यम से Iterates, Pवर्णों के सेट पर नज़र रखते हुए अब तक विषम संख्या में देखा गया। सूची dसभी पुराने मूल्यों को संग्रहीत करती है P, और यदि Pपहले से ही वर्तमान को देखते हैं d, तो इसका मतलब है कि उस समय के बाद से देखे गए वर्णों में, प्रत्येक वर्ण एक समान संख्या में दिखाई दिया है। यदि ऐसा है, तो देखें कि क्या हम पूरे इनपुट से गुज़रे हैं: यदि हमारे पास है, तो स्वीकार करें क्योंकि पूरे स्ट्रिंग को अपेक्षित रूप से जोड़ा गया है, और अन्यथा अस्वीकार करें।

अब स्रोत प्रतिबंध के बारे में। युग्मन की आवश्यकता वाले पात्रों को विभिन्न हानिरहित स्थानों में भरा जाता है, जो नीचे दिए गए हैं:

bmn0=f=lambda s,P={0},d=[]:s<" "if(P in d)else+f(s[f<s:],P^{s[0^0]},[P]+d)
_____              _              _      _    _    ___        ___    

f<sकरने के लिए मूल्यांकन करता है 0, जबकि एक बंद युग्मन हो fकार्यप्रणाली के नाम भी किया जा रहा है का लाभ लेने के fलिए इतना है कि यह निर्धारित किया है (समय समारोह कहा जाता है से।) 0^0एक को अवशोषित कर लेता ^प्रतीक।

0में P={0}अजगर में: दुर्भाग्य की बात है {}एक खाली सेट हम चाहते हैं के रूप में के बजाय एक खाली dict के लिए मूल्यांकन करता है, और यहाँ हम किसी भी गैर चरित्र तत्व में डाल सकते हैं और यह हानिरहित हो जाएगा। मुझे हालांकि इसमें डालने के लिए कुछ भी दिखाई नहीं दे रहा है, और 2 बाइट की लागत से 0इसे डुप्लिकेट किया गया है bmn0। ध्यान दें कि आरंभिक तर्कों का मूल्यांकन तब किया जाता है जब फ़ंक्शन को परिभाषित किया जाता है, इसलिए चर जो हम स्वयं को परिभाषित करते हैं, उन्हें यहां नहीं रखा जा सकता है।


4

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

*.comb[^*X+(^*).map(^*)].grep({$_&[&]($_)}).none.Bag{*}.none%2#*^+XBob2rec%#

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

जो कुछ भी लंबोदर जो कोई भी जंक्शन नहीं देता है, जो किसी भी जंक्शन को नहीं देता है, जिसे एक सत्य / गलत मूल्य के रूप में स्वीकार किया जा सकता है। मैं अनुशंसा ?करूंगा कि हालांकि, वापसी परिणाम को हटा नहीं दिया जाए, अन्यथा आउटपुट बड़ा हो जाता है ।

यह समाधान द्वारा अनलिंक की जा रही कई शामिल काम करता है, जैसे की वजह से, एक छोटे से जरूरत से ज्यादा जटिल है .., all, >>, %%आदि स्रोत प्रतिबंध के बिना, इस 43 बाइट्स हो सकता है:

*.comb[^*X.. ^*].grep(?*).one.Bag{*}.all%%2

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

स्पष्टीकरण:

*.comb                     # Split the string to a list of characters
      [^*X+(^*).map(^*)]   # Get all substrings, alongside some garbage
                        .grep({$_&[&]($_)})        # Filter out the garbage (empty lists, lists with Nil values)
                                           .none                 # Are none of
                                                .Bag{*}          # The count of characters in each substring
                                                       .none%2   # All not divisible by 2

                                               #*^+XBob2rec%#    And garbage to even out character counts

3

पर्ल 5 -p, 94, 86, 78 बाइट्स

m-.+(?{$Q|=@q&grp,$\|=$&eq$_^!grep+/^/&(@m=$g=~/\Q$_/g),($g=$&)=~/./g})(?!)-}{

ouput 0 यदि अच्छी तरह से जुड़ा हुआ है अन्यथा 1।

78 बाइट्स

86 बाइट्स

94 बाइट्स

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

  • -pसाथ }{उत्पादन के लिए चाल न खत्म होने वाली $\अंत में
  • m-.+(?{.. })(?!)-, सभी गैर-रिक्त सबस्ट्रिंग पर कोड निष्पादित करने के लिए ( .+पूरे स्ट्रिंग को पहले मेल खाता है, और कोड को निष्पादित करने के बाद (?{.. })बैकट्रैक के कारण असफल होने के लिए मजबूर किया गया(?!)
  • $Q|=@q&grp, स्रोत प्रतिबंध के कारण कचरा
  • $\|=पूर्णांक बिटवाइज़ या असाइनमेंट, यदि लगभग एक 1 है, $\तो 1 (सत्य) होगा, डिफ़ॉल्ट रूप से यह खाली (गलत) है
  • $&eq$_मामला जहां sbustring पूरी स्ट्रिंग है, ^"कोई विषम चरित्र घटना नहीं है"
  • ($g=$&)=~/./gमिलान किए गए $gप्रतिस्थापन को कॉपी करने के लिए (क्योंकि अगले रेगेक्स मैच के बाद ओवरवार्ट हो जाएगा) और प्रतिस्थापन के चरित्र के सरणी को वापस कर देगा।
  • /^/ कचरा जो 1 का मूल्यांकन करता है
  • grep1 &(@m=$g=~/\Q$_/g),में प्रत्येक वर्ण के लिए, वर्ण के वर्ण को $gस्वयं मिलान करने में मिलता है, स्केलर में सरणी अपने आकार का मूल्यांकन करता है और grepविषम घटनाओं वाले वर्णों को फ़िल्टर 1&xकरने के लिए बराबर हैx%2==1

मुझे नहीं लगता कि यह स्रोत प्रतिबंध को संतुष्ट करता है: मैं खुले कोष्ठकों की एक विषम संख्या की गणना करता हूं, उदाहरण के लिए
msh210 21

@ msh210 कि बात नहीं है? यदि एक समान संख्या है, तो यह अच्छी तरह से जुड़ा नहीं है
क्विंटेक 23

अच्छी तरह से जोड़ा जा रहा है के लिए आवश्यकताओं की @Quintec एक वहाँ वह यह है कि कर रहे हैं हर किरदार की समान संख्या।
अर्जन जोहान्सन

मेरे पहले उत्तर की आवश्यकता थी, लेकिन गोल्फ में प्रयास करने के बाद, इसे खो दिया। अद्यतन किया जा सकता है, लेकिन गोल्फ हो सकता है।
नहुएल फौलीउल

1
यहां सभी स्रोत स्रोत प्रतिबंध को संतुष्ट करते हैं, साथ ही कोड 0 भी देता है यदि अच्छी तरह से जुड़ा हुआ है और यहां तक ​​कि प्रत्येक वर्ण की संख्या भी है
नहुएल फौइउल

3

रेटिना , 150 96 बाइट्स

^(?!(.*)(.+)(.*)$(?<!^\2|^\1(?:(^?(?:(?!\6).)*\6){2})*(|(?!\6).)*(?!.+\6.*\3$)(.){1,}\3)(?!,<)?)

इसे ऑनलाइन आज़माएं! लिंक में स्वयं सहित परीक्षण मामले शामिल हैं। संपादित करें: मूल रेगेक्स को @Deadcode की मदद से काफी हद तक नीचे उतारा, फिर स्रोत के लेआउट को बनाए रखने के लिए थोड़ा कम अतिरिक्त रूप से गद्देदार बनाया। स्पष्टीकरण:

^(?!(.*)(.+)(.*)$

जोर देते हैं कि कोई विकल्प \3मौजूद नहीं है जो निम्नलिखित बाधाओं से मेल खाता है।

(?<!^\2|

जोर देते हैं कि सबस्ट्रिंग संपूर्ण मूल स्ट्रिंग नहीं है।

^\1(?:(^?(?:(?!\6).)*\6){2})*(|(?!\6).)*(?!.+\6.*\3$)(.){1,}\3)(?!,<)?)

दावा करते हैं कि ऐसा कोई चरित्र नहीं \6है:

  • यह चरित्र (विशेष) और सब्र के अंत के बीच प्रकट नहीं होता है
  • यह सबरिंग की शुरुआत और स्वयं (अनन्य) के बीच कई बार दिखाई देता है

स्रोत लेआउट बाधा को पारित करने के लिए, मैंने उसके ((((साथ (?:(^?(?:(और ((साथ बदल दिया (|(। मेरे पास अभी भी एक स्रोत की कमी थी ))और पात्र !()1<{}बचे थे, इसलिए मैंने एक बदल +दिया {1,}और (?!,<)?बाकी का उपभोग करने के लिए बेकार डाला ।


2
यह प्रतिबंधित स्रोत आवश्यकताओं को पूरा करने के लिए नहीं लगता है।
अर्जन जोहानसन

@ UprjanJohansen अंत में, मैं एक वैध समाधान के साथ आया हूँ। हालांकि वहाँ बहुत सारे कबाड़ हैं, इसलिए कुछ कम उपलब्ध हो सकता है ...
नील

3

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 208 206 200 198 बाइट्स

x=>!x.GroupBy(c=>c).Any(g=>g.Count()%2>0)&!Enumerable.Repeat(x.Count,x.Count*x.Count).Where(
(l,i)=>i%l>0&!x.Skip(i/l).Take(i%l).GroupBy(c=>c).Any(g=>g.Count()%2>0)
).Any()/*>!oyAnC0EmeablR*WhiS/T*/

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

-2 बाइट्स @KevinCruijssen को धन्यवाद!

अंत में यह 200 से नीचे हो गया, इसलिए मुझे अभी के लिए गोल्फिंग किया जा सकता है :) मैंने पिछले जवाब के आधार पर चीजों का परीक्षण करने के लिए एक दूसरा टीआईओ बनाया।

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

चीजें हैं जो इस काम मुश्किल बना दिया:

  • समानता ऑपरेटर ==को अनुमति नहीं थी
  • इंक्रीमेंट / असाइन ऑपरेटर ++की अनुमति नहीं थी
  • Linq All()फ़ंक्शन की अनुमति नहीं थी

नीचे टिप्पणी कोड:

// anonymous function that takes an IList as input
x=>
  // the first condition makes sure the string even
  // counts of each character
  !x.GroupBy(c=>c).Any(g=>g.Count()%2>0)&
  // the second condition generates all proper substrings of x
  // and tests for any that contain even character counts
  // the string length `l` is repeated `l*l` times
  !Enumerable.Repeat(x.Count,x.Count*x.Count)
    .Where((l,i)=>
      // check that the substring length is greater than 0
      i%l>0&
      // use skip/take to generate a substring
      // and check for a character count thats odd
      // negate the result meaning we have found
      // a substring that invalidates the input
      !x.Skip(i/l).Take(i%l)
        .GroupBy(c=>c).Any(g=>g.Count()%2>0)
    )
    // if any invalid substrings are found
    // then the result in invalid
    // the comment string at the end is needed
    // to make the program well-linked
    .Any()/*>!oyAnC0EmeablR*WhiS/T*/

आप अपनी अनुगामी टिप्पणी में दो रिक्त स्थान निकाल सकते हैं।
केविन क्रूज़सेन

@ केविनक्रूजसेन - अच्छा एक :) मैं भूल गया था कि मैंने पहले से ही एक स्थान जोड़ा है। मुझे स्रोत में एक और फेंकना था।
दना

2

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

lambda d,e=enumerate:min(max(d[l:l+b].count(k)%2for(k)in d)for b,c in e(d[2:],2)for l,f in e(d) )#b =:x+.%2#

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

-2 अर्जन जोहान्सन को धन्यवाद ।


@ .RrrJohansen हू, अच्छा। संपादित करें: ऐसा लगता है कि यह कुल मिलाकर केवल दो बाइट्स बचाता है।
आउटगॉल्फ

2

Brachylog , 16 बाइट्स

sᶠb∋p~j&sᶠb∋p~j&

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

false.सत्य उदाहरणों के लिए और झूठे उदाहरणों के लिए प्रिंट true.। TIO संस्करण खुद को संभालने के लिए बहुत धीमा है, लेकिन यह स्पष्ट रूप से अच्छी तरह से जुड़ा हुआ है क्योंकि यह दो बार दोहराए जाने वाले अद्वितीय वर्णों के साथ एक स्ट्रिंग है।

व्याख्या

    Input is a string: "abcacbaa"
sᶠ  Find all substrings: ["abcacbaa","abcacba","abcacb",..,"a"]
b   Behead (now the proper substrings remain): ["abcacba","abcacb",..,"a"]
∋   Take one of them: "abcacb"
p   Permute it: "abcabc"
~j  It is some string repeated twice: "abc"
&   Get the input again: "abcacbaa"
    Then repeat the above.
    If the constraints can be satisfied, the result is true, otherwise false.

1

05AB1E , 22 20 बाइट्स

Œε¢Pà}KŒIKεSIS¢ÈP}àÈ

1यदि स्ट्रिंग अच्छी तरह से जुड़ा हुआ है, और 0यदि स्ट्रिंग अच्छी तरह से जुड़ा हुआ नहीं है तो आउटपुट ।

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

आधार कार्यक्रम ŒsKεsS¢ÈP}à( 11 बाइट्स ) है, जो 0अच्छी तरह से जुड़ा हुआ है और 1अगर अच्छी तरह से जुड़ा नहीं है , तो आउटपुट । अनुगामी È(is_even) एक अर्ध नो-ऑप है जो आउटपुट को निष्क्रिय करता है, इसलिए 1अच्छी तरह से जुड़े तारों के लिए और अच्छी तरह से जुड़े तारों के 0लिए नहीं। चुनौती के नियमों का पालन करने के लिए अन्य भाग नो-ऑप हैं।

Œε¢Pà}K         # No-ops: substrings, map, count, product, maximum, close map, remove
                # Due to the last remove, we're back at the (implicit) input again
Œ               # Take the substrings of the input
 IK             # Remove the input itself from that list of substrings
   ε            # Map each substring to:
    S           #  No-op: transform the substring into a list of characters
     IS         #  Get the input-string as a list of characters
       ¢        #  Count the occurrence of each character in the current substring
        È       #  Check which counts are even (1 if truthy; 0 if falsey)
         P      #  Take the product of that
              # After the map: check if any are truthy by taking the maximum
            È   # Semi no-op: check if this maximum is even (0 becomes 1; 1 becomes 0)
                # (and output the result implicitly)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.