मेरे लेस्बियन को सत्यापित करें


15

परिदृश्य

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

वैध लेस्जिन

एक वैध लेस्जिन है

  • कम से कम 5 कॉलम चौड़ा
  • कम से कम 4 परतें ऊंची
    • अतिरिक्त पनीर को छोड़कर
  • शीर्ष परत पनीर है (द्वारा प्रस्तुत ,)
  • दूसरी परत सॉस है ( @या तो द्वारा प्रतिनिधित्व किया जाता है #)
  • उसके बाद परतें वैकल्पिक (1 परत सॉस, 1 परत नूडल्स ( ~या तो द्वारा प्रतिनिधित्व -) या )
  • प्रत्येक स्तंभ में पनीर की एक या दो परतें हो सकती हैं

कार्यक्रम

चाहिए

  • इनपुट के रूप में एक लेस्बियन स्ट्रिंग लें
    • मल्टीलाइन स्ट्रिंग
    • स्ट्रिंग सरणी
    • स्ट्रिंग में केवल वर्ण होते हैं ,@#~-
    • आयताकार
    • यदि आवश्यक हो तो रिक्त स्थान के साथ गद्देदार
  • आउटपुट है कि क्या यह एक मान्य लासगैन है
    • यदि मान्य हो तो आपकी भाषा में कोई भी बात जो भी हो
    • आपकी भाषा में कुछ भी या कुछ भी गलत नहीं है
  • या तो हो
    • एक पूर्ण कार्यक्रम
    • एक समारोह
    • यह केवल कार्यक्षमता का उपयोग करता है जिसे 14.12.2016 से पहले लागू किया गया था

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

,, ,
,,,,,,
@@@###
~~~~~-
@##@@#

--> truthy


@@@#
----
@@##
----
@###

--> falsy (cause of cheese and width (You don't have to print the stuff in the brackets))


,,,,,
-----
@####
-----
@@@@@

--> falsy (have the sauce as last layer)

मानदंड जीतना

सबमिशन जीतता है।


13
कृपया उस कोष्ठक को बंद करें
क्वेंटिन

प्रश्न: क्या इसे क्षैतिज रूप से आयताकार होने की आवश्यकता है? अगर यह 10 पंक्तियों वाली ऊंची और 9 स्तंभों वाली हो तो क्या होगा?
रुस्लान

युक्ति कहती है कि यह केवल ,@#~-पैडिंग के रूप में रिक्त स्थान के अपवाद के साथ हो सकता है , लेकिन पहले परीक्षण मामले में एक पंक्ति के बीच में रिक्त स्थान होते हैं।
feersum

@ फॉर्सम "यदि आवश्यक हो तो रिक्त स्थान के साथ गद्देदार"
UKMonkey

जवाबों:


11

रेटिना , 38 34 बाइट्स

4 बाइट बचाने के लिए ग्रिम का धन्यवाद।

अपने लासगैन के साथ एक रेगेक्स रखें।

बाइट गिनती आईएसओ 8859-1 एन्कोडिंग मानती है।

^([, ]+¶)?,{5,}(¶[@#]+¶[-~]*){2,}$

मान लेता है कि इनपुट एक अनुगामी लाइनफीड के साथ समाप्त होता है। 1वैध लैसों के लिए प्रिंट (मैच) और 0अमान्य लोगों के लिए (कोई मैच नहीं)।

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

व्याख्या

यह इनपुट के विरुद्ध एक मानक .NET रेगेक्स से मेल खाता है, सिवाय इसके कि रेटिना लाइनफीड्स के लिए उपनाम प्रदान करता है या \n

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

^           # Anchor the regex to the beginning of the input.
([, ]+¶)?   # Match an optional first line of only commas an spaces.
,{5,}       # Match at least 5 commas.
(           # Match this at least twice to ensure at least two layers of sauce.
  ¶[@#]+    #   Match a line of sauce.
  ¶[-~]*    #   Match a line of pasta. This line may be empty (which would
            #   indicate the end of the input.
){2,}
$           # Make sure we've indeed reached the end. Note that `$` can
            # match either at the very end of the input, or in front of
            # the trailing linefeed.

यदि हमें यह मानने की अनुमति है कि अंतिम पंक्ति (जो उचित लगता है) के बाद एक अंतिम लाइनफीड है, तो आप ¶[-~]*इसके बजाय (¶[-~]+|$)4 बाइट बचाकर उपयोग कर सकते हैं ।
ग्रिमी

@Grimy आह अच्छा पकड़, धन्यवाद!
मार्टिन एंडर

5

ग्रिम , 43 बाइट्स

e`[ \,]+/?/(\,/[#@]^/[\-~]/+/[#@]/?)+{5-,4-

इसे ऑनलाइन आज़माएं! 1मैच के लिए प्रिंट और 0बिना मैच के।

व्याख्या

Grime को दो-आयामी पैटर्न के मिलान के लिए डिज़ाइन किया गया है, जो छोटे पैटर्न से टुकड़े द्वारा निर्मित होते हैं। मैं पहले वैकल्पिक शीर्ष परत को परिभाषित करता हूं, फिर एक ऊर्ध्वाधर पट्टी को दोहराकर अन्य परतें।

e`                                           Match entire input against pattern:
        /?                                   Optionally
  [ \,]+                                     a row of spaces and commas,
          /                                  below that
           (                       )         this pattern
                                    +        repeated horizontally
                                     {5-,4-  having size at least 5x4. 
                                             The brace is closed implicitly.
                                             "This pattern" is a vertical stripe containing
            \,                               a comma,
              /                              below that
               [#@]^/[\-~]                   a sauce character on top of a noodle character
                                             (the ^/ is like / but with higher precedence)
                          /+                 repeated vertically,
                            /                below that
                                 /?          optionally
                             [#@]            a sauce character.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.