हमें क्या मिला?


17

से प्रेरित है, और हमारी प्यारी प्रतिभा की स्मृति में,

जॉन स्कोल्स, 1948-2019

आरआईपी

उन्होंने आविष्कार किया और dfns को लागू किया - उनका मैग्नम ओपस और चुनौती का विषय।

रुचि के लिए: जॉन के साथ नवीनतम पूर्ण dfns प्रलेखन और वीडियो

कार्य

ASCII स्रोत कोड को देखते हुए, निम्नलिखित में से किस चार श्रेणियों में इसका उत्तर है:

  1. डायैडिक डोप

  2. मोनाडिक डोप

  3. DFN

  4. अन्य

आप कोई भी चार सुसंगत मान लौटा सकते हैं, लेकिन यदि यह स्पष्ट नहीं है तो कृपया अपनी मैपिंग बताएं।

विवरण

आप मान सकते हैं कि स्रोत कोड हमेशा एक उद्घाटन घुंघराले ब्रेस के साथ शुरू होता है {और एक समापन घुंघराले ब्रेस के साथ समाप्त होता है }

पुनरावर्ती नेस्टेड ब्रेसिज़ हो सकते हैं (उदाहरण के लिए {{{}}}), लेकिन श्रेणियों 1–3 में ब्रेसिंग नेस्टिंग की गहराई 1 से कम नहीं हो सकती (इसलिए {}{}"अन्य" है) और सभी ब्रेसिज़ संतुलित होना चाहिए (इसलिए {{}"अन्य" है)।

एक लाइन पर निम्नलिखित संदर्भों में वर्णों को अनदेखा किया जाता है:

  1. #एक टिप्पणी के अधिकार के लिए ):significant#ignored

  2. एकल उद्धरण में संलग्न '... '(यानी एक स्ट्रिंग में): significant'ignored'significant(यह लागू होता है #भी: '#'significant)

  3. एक अनपेक्षित उद्धरण के दाईं ओर '(बाएं से उद्धरण जोड़ते हुए):significant'ignored

घुंघराले ब्रेस लेवल एक में (यानी नेस्टेड ब्रेसेस को छोड़कर):

  • डायैडिक डॉप्स में निर्बाध वाक्यांश होता है ww

  • मोनाडिक डॉप्स नहीं होते हैं ww, लेकिन होते हैंaa

  • Dfns में न तो शामिल है और न wwहीaa

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

डायैडिक डॉप्स

{ww}
{
    www
}
{
''ww'
}
{aa

ww}
{'#''#'ww?aa}

मोनोडिक डोप

{aa}
{aaaa}
{aa{ww}'ww'}
{w#w'
aa'
}
{aaw*w}
{w'\'aa\''}

Dfns

{}
{a a}
{aA}
{
{aa}
}
{w
w''w#
w}
{{
}}
{w\'aa\'}

अन्य

{}{}
{{}
{}}
{ww}}
{}
{}
{ww}{}
{#}
{'
'}

@LuisfelipeDejesusMunoz Dfn यदि आपको अन्यथा सोचने का कोई कारण दिखाई देता है, तो कृपया मुझे बताएं।
एडम

1
क्या स्ट्रिंग उद्धरण से बच सकते हैं, और यदि हमें उन्हें संभालने की आवश्यकता है? (जैसे: {'#\'ww?aa'}-> अन्य?)
19urous

1
@ :Urous नहीं, जैसा कि कहा गया है: उद्धरण में कुछ भी महत्वहीन है। (वास्तव में, एपीएल स्ट्रिंग्स का कोई बच तंत्र नहीं है।) मैं एक मामला जोड़ूंगा।
5:24 बजे

हम्म, क्या हम यह मान सकते हैं कि तार शामिल नहीं होंगे ''(स्ट्रिंग में एपोस्ट्रोफ, इस चुनौती के लिए दो आसन्न तारों के रूप में भी पार्स किया जा सकता है)?
को आउटगॉल्फ को एरिक करें

@EriktheOutgolfer यह हो सकता है। मैं एक मामला जोड़ूंगा, लेकिन जैसा कि आप कहते हैं, इससे कोई फर्क नहीं पड़ता कि 'abc''def'इस चुनौती के लिए एक या दो तार के रूप में पार्स किया गया है या नहीं।
16

जवाबों:


9

जावास्क्रिप्ट (ईएस 6),  145 ... 138  136 बाइट्स

0123

s=>[...s].map(c=>s=(n=`
aw}{#'`.indexOf(c))?n>5?i^=2:i?0:n>4?i=1:n>3?d++:n>2?x+=!d--:(o|=n<0|d|s!=c?0:n,c):i=0,o=i=0,x=d=-1)|x|~d?3:2>>o

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

वैकल्पिक संस्करण

कैसे?

इनपुट स्ट्रिंग चरित्र द्वारा पार्स किया गया है।

कोड में वर्णों का अनुवाद

प्रत्येक वर्ण सीn

 character | code | triggered operation
-----------+------+---------------------------------------------------------
    \n     |   0  | i = 0
     a     |   1* | o |= n < 0 | d | s != c ? 0 : n
     w     |   2* | o |= n < 0 | d | s != c ? 0 : n
     }     |   3* | x += !d--
     {     |   4* | d++
     #     |   5* | i = 1
     '     |   6  | i ^= 2
   other   |  -1* | same as 'a' or 'w', but always fails because of 'n < 0'

कोड एक ' के साथ चिह्नित*मैं0

चर प्रदेश का वर्णन करने वाले चर

निम्नलिखित चर का उपयोग पार्सिंग के दौरान किया जाता है:

    • बिट 0: एक वैध वाक्यांश aaका सामना किया गया है
    • बिट 1: एक वैध वाक्यांश wwका सामना किया गया है
  • मैं

    • बिट 0: हम वर्तमान में एक टिप्पणी के अंदर स्थित हैं
    • बिट 1: हम वर्तमान में एक स्ट्रिंग के अंदर स्थित हैं (यह बिट अभी भी एक टिप्पणी के भीतर अपडेट किया गया है, लेकिन यह हानिरहित है)
  • रों : पिछले पुनरावृत्ति का परिणाम है

  • -1 )
  • एक्स0-11

अंतिम परिणाम

3एक्स0-1012


6

जेली ,  50 48 46  45 बाइट्स

Ỵµṣ”'m2Kṣ”#Ḣ)KµċⱮƤØ{IF©<-oµ⁾waż¤ẇ€‘Ḅ«5×®¬Ḅ⁼1¤

एक मोनडिक लिंक जो पात्रों की एक सूची को स्वीकार करता है जो उपज देता है:

5 - Dyadic dop
4 - Monadic dop
3 - Dfn
0 - Other

इसे ऑनलाइन आज़माएं! या एक परीक्षण-सूट देखें
पायथन सेट या शब्दकोश के रूप में इनपुट के मूल्यांकन की संभावना से बचने के लिए पायथन का उपयोग करता है

कैसे?

Ỵµṣ”'m2Kṣ”#Ḣ)KµċⱮƤØ{IF©<-oµ⁾waż¤ẇ€‘Ḅ«5×®¬Ḅ⁼1¤ - Link: list of characters
                                              - breaking long Link up...
Ỵµṣ”'m2Kṣ”#Ḣ)K      - Replace any strings or comments with (single) spaces
Ỵ                   - split at newline characters
 µ          )       - monadic chain for each:
  ṣ”'               -   split at apostrophe characters
     m2             -   modulo 2 slice (i.e. every other part starting with the first
                    -   - that is, non-string code. Will remove strings from within comments)
       K            -   join with spaces
        ṣ”#         -   split at octothorp characters
           Ḣ        -   head (i.e. non-comment code)
             K      - join with spaces

µċⱮƤØ{IF©<-oµ       - Replace characters of code at depth > 1 with the integer 1
µ           µ       - monadic chain, call previous result A:
    Ø{              -   literal ['{','}']
   Ƥ                -   for prefixes of A:
  Ɱ                 -     map across right argument with:
 ċ                  -       count
      I             -   deltas (i.e. [count('}') - count('{')] for each prefix)
       F            -   flatten (i.e. count('}') - count('{') for each prefix)
                    -   -- i.e -1*depth of each character of A; closing braces at depth+1
        ©           -   (copy this list of depths to the register for later use)
         <-         -   less than -1? (vectorises)
           o        -   logical OR with A (vectorises, replacing deep code with 1s)

⁾waż¤ẇ€‘Ḅ«5×®¬Ḅ⁼1¤ - Categorise the result, R
    ¤              - nilad followed by link(s) as a nilad:
⁾wa                -   literal ['w', 'a']
   ż               -   zip with itself = [['w','w'],['a','a']]
     ẇ€            - for €ach: is a sublist of R?  i.e. one of: [0,0] [1,0] [0,1] [1,1]
       ‘           - increment (vectorises)                     [1,1] [2,1] [1,2] [2,2]
        Ḅ          - unbinary                                     3     5     4     6
         «5        - minimum with five                            3     5     4     5
                 ¤ - nilad followed by link(s) as a nilad:
            ®      -   recall depths from the register
             ¬     -   logical NOT (vectorises) (0->1, other depths->0)
              Ḅ    -   unbinary
               ⁼1  -   equal one -- i.e. depths ends with a 0 and contains no other zero 
           ×       - multiply

3

साफ , 309 293 284 बाइट्स

हम एक बार में केवल 3 चर नामों का उपयोग करके दूर हो सकते हैं, इसलिए हम उन्हें कॉल करेंगे a,p और l

import StdEnv,Text,Data.List
a=isInfixOf o zip2[2,2]
@ =['\'']
$p#p=join@[foldl((\[a:p]_|p>[]=a++[';':join@(tl p)]=split['#']a!!0)o split@)l l\\l<-mklines p]
#l=[(?a- ?l,p)\\a<-inits p&[p:l]<-tails p]
|{p\\(a,p)<-l|a<2}<>"{}"=0|a['ww']l=1|a['aa']l=2=3
?l=sum[1\\'{'<-l]-sum[1\\'}'<-l]

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

फ़ंक्शन को परिभाषित करता है $ :: [Char] -> Intमैपिंग देते और कुछ :

  • 0: अन्य
  • 1: डायैडिक डॉप
  • 2: मोनाडिक डोप
  • 3: Dfn

विस्तारित (पहला संस्करण), और 3 से अधिक चर नामों के साथ:

$ s
    # s // remove strings and comments
        = join [';'] [ // join the second argument with semicolons
            limit ( // take the first repeated element of
                iterate // an infinite list of applications of the first argument
                    (
                        (
                            \(p, q) = p ++ case q of // join the first half with a modified second half
                                ['\'\'': q] = [';': q] // replace two quotes with a semicolon
                                [c, _: q] = [c: q] // drop the character after a quote or hash
                                _ = [] // leave unmatched strings unchanged
                        ) o span // split the string on the first occurrence of
                            \c = c <> '\'' && c <> '#' // a quote or hash
                    ) l // applied to l
                )
            \\ l <- mklines s // for line l in s split at newlines
        ]
    # b // generate a map of nesting levels
        = [
            ( // the pair of
                ?i - ?t, // the nesting level
                c // the character c
            ) 
            \\ i <- inits s // for init i of s
            & // synchronously iterated with 
                [c: t] <- tails s // character c at the start of tail [c:t] of s
        ]
    // determine what the code is
    | {c \\(n, c) <- b | n < 2} // if the string made of characters with nesting level of less than 2
        <> "{}" // is not the same as the paired braces at the beginning and end
        = 0 // return zero
    | m ['ww'] b // if there are two consecutive 'w's at nesting level 2
        = 1 // return 1
    | m ['aa'] b // if there are two consecutive 'a's at nesting level 2
        = 2 // return 2
    = 3 // otherwise return 3

0

रेटिना 0.8.2 , 91 बाइट्स

m`'.*?('|$)|#.*
¶
s(+`(?!^)\{[^{}]*\}(?!$)
¶
^(?!\{[^{}]*\}$).+
3
^.+ww.+
2
^.+aa.+
1
..+
0

इसे ऑनलाइन आज़माएं! लिंक में परीक्षण सूट शामिल है। स्पष्टीकरण:

m`'.*?('|$)|#.*
¶

तार और टिप्पणी निकालें।

s(+`(?!^)\{[^{}]*\}(?!$)
¶

मिलान वाले कोष्ठक निकालें, जो अंतरतम से बाहर काम कर रहे हैं, लेकिन पहले और अंतिम कोष्ठक को छोड़ दें।

^(?!\{[^{}]*\}$).+
3

अगर हमारे पास कोष्ठक नहीं है तो यह अन्य है।

^.+ww.+
2

नहीं तो हमारे पास है ww तो यह डायैडिक डोप है।

^.+aa.+
1

नहीं तो हमारे पास है aa तो यह मोनाडिक डोप है।

..+
0

अन्यथा अगर यह कुछ भी ऊपर कवर नहीं है तो यह डीएफएन है।

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