আমরা কি পেয়েছি?


17

আমাদের প্রিয় প্রতিভা দ্বারা অনুপ্রাণিত এবং স্মরণে,

জন স্কোলস, 1948-2019

চেরা

তিনি আবিষ্কার করেছেন এবং প্রয়োগ করেছেন 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}{}
{#}
{'
'}

@ লুইসেলিপডিজেসাস মুনোজ ডিএফএন যদি আপনি অন্যথায় ভাবার কারণ দেখেন তবে দয়া করে আমাকে জানান।
অ্যাডাম

1
স্ট্রিং কোটগুলি এড়ানো যেতে পারে এবং যদি তা হয় তবে আমাদের সেগুলি হ্যান্ডেল করা দরকার? (যেমন: {'#\'ww?aa'}-> অন্যান্য?)
--urous

1
@ Οurous না, অনুমান অনুযায়ী বলা হয়েছে: উদ্ধৃতিতে যে কোনও কিছুই তুচ্ছ। (আসলে, এপিএল স্ট্রিংগুলিতে পালানোর কোনও ব্যবস্থা নেই)) আমি একটি কেস যুক্ত করব।
অ্যাডম

এইচএম, আমরা কি ধরে নিতে পারি যে স্ট্রিংগুলিতে স্ট্রিং থাকবে না ''(এই চ্যালেঞ্জের জন্য দুটি সংলগ্ন স্ট্রিং হিসাবেও পার্স করা যায়)?
এরিক দ্য আউটগল্ফার

পুনঃটুইট আমি একটি কেস যুক্ত করব, তবে আপনি যেমন বলেছেন, 'abc''def'এই চ্যালেঞ্জের জন্য এক বা দুটি স্ট্রিং হিসাবে পার্স করা হয়েছে কিনা তা বিবেচ্য নয় ।
অ্যাডম

উত্তর:


9

জাভাস্ক্রিপ্ট (ES6),  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

এটি অনলাইন চেষ্টা করুন!

বিকল্প সংস্করণ

  • ইনপুট হিসাবে অক্ষরের অ্যারে নিয়ে 131 বাইট
  • বাফার () (নোড.জেএস)ব্যবহার করে 132 বাইট

কিভাবে?

ইনপুট স্ট্রিং অক্ষর দ্বারা পার্স করা হয়।

কোডগুলিতে অক্ষরের অনুবাদ

এন

 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: ডিএফএন

প্রসারিত (প্রথম সংস্করণ) এবং 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

অন্যথায় যদি এটি উপরে কিছু আচ্ছন্ন না থাকে তবে এটি ডিফএন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.