লিক্সোগ্রাফিকাল ক্রমে প্যারেন্টেসিস ক্রম


9

চ্যালেঞ্জ এখান থেকে এবং এখানেও নেওয়া হয়েছে

একটি এন প্রথম বন্ধনী ক্রম n ( s এবং n ) গুলি নিয়ে গঠিত ।

একটি বৈধ বন্ধনী ক্রম নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হয়:

খালি না হওয়া পর্যন্ত আপনি "()" এর নিকটবর্তী জোড়া বন্ধনের পুনরাবৃত্তি করার একটি উপায় খুঁজে পেতে পারেন।

উদাহরণস্বরূপ, (())একটি বৈধ প্রথম বন্ধনী, আপনি 2 য় এবং 3 য় অবস্থানে জুটি মুছতে পারেন এবং এটি হয়ে যায় (), তারপরে আপনি এটিকে খালি রাখতে পারেন। )()(কোনও বৈধ বন্ধনী নয়, আপনি দ্বিতীয় এবং তৃতীয় অবস্থানে জুটি মুছে ফেলার পরে এটি হয়ে যায় )(এবং আপনি আর মুছতে পারবেন না

কার্য

প্রদত্ত একটি সংখ্যা এন আপনি সমস্ত সঠিক প্রথম বন্ধনী ক্রম জেনারেট করতে প্রয়োজন আভিধানিক অর্ডার

আউটপুট একটি অ্যারে, তালিকা বা স্ট্রিং হতে পারে (এক্ষেত্রে লাইন প্রতি ক্রম)

আপনি প্রথম বন্ধনী যেমন একটি ভিন্ন যুগল ব্যবহার করতে পারেন {}, [], ()বা কোন ওপেন ঘনিষ্ঠ চিহ্ন

উদাহরণ

  • n = 3

    ((()))    
    (()())    
    (())()    
    ()(())    
    ()()()
    
  • n = 2

    (())
    ()()
    

@ জোকিং হ্যাঁ অবশ্যই আমি ধরে নিই যে চ্যালেঞ্জের মূল ধারণার সাথে যে কোনওভাবেই কোনও পার্থক্য আসবে না।
লুইস ফেলিপ দে জেসুস মুনোজ

হ্যাঁ, আমি কয়েকটি ভাষাগুলির কথা ভাবতে পারি যেখানে উদাহরণস্বরূপ উদাহরণগুলি তাদের ব্যাখ্যা করতে পারে
জো কিং

1
সম্পর্কিত: কাতালান নম্বর (সেই চ্যালেঞ্জের ফলাফল = এই চ্যালেঞ্জের ফলাফলের সংখ্যা সংখ্যা)
ব্যবহারকারী 202729

3
কার্যত একই , তবে কিছু অদ্ভুত বিধিনিষেধের সাথে যেমন "আপনি পুনরাবৃত্ত ফাংশন লিখতে পারেন না"। /// এই চ্যালেঞ্জের একটি সুপারসেট (সমস্ত ব্রেন-
ফ্ল্যাক

"কোনও ওপেন-ক্লোজ চিহ্ন" এর ক্রমগুলির "একটি অ্যারে, তালিকা বা স্ট্রিং" এর অর্থ কি আমরা দুটি সংখ্যার (যেমন 1গুলি এবং -1গুলি) এর তালিকার একটি তালিকা আউটপুট করতে পারি ?
জনাথন অ্যালান

উত্তর:


8

পার্ল 6 , 36 বাইট

{grep {try !.EVAL},[X~] <[ ]>xx$_*2}

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

এর সমস্ত লেক্সোগ্রাফিকভাবে সাজানো সংমিশ্রণগুলি সন্ধান করে 2এন []গুলি এবং যেগুলি EVALসঠিকভাবে ফিল্টার করে । নোট করুন যে সমস্ত বৈধ সংমিশ্রণগুলি (এমনকি স্টাফের মতোও [][]) মূল্যায়ন করে [](যা মিথ্যা, তবে আমরা notএটি ( !) tryফিরে আসা থেকে আলাদা করতে পারি Nil)

ব্যাখ্যা:

{                                  }  # Anonymous code block
                        <[ ]>         # Create a list of ("[", "]")
                             xx$_*2   # Duplicate this 2n times
                   [X~]               # Find all possible combinations
 grep {          },                   # Filter from these
            .EVAL                     # The EVAL'd strings
       try !                          # That do not throw an error

3
যদি কারও কৌতূহল [][]হয় তবে খালি অ্যারের জেন ফালিটি যা নিজেই অ্যারে দেয়। স্লাইস একাধিকবার প্রয়োগ করা যেতে পারে, তাই [][][][]...মূল্যায়ন করে []। তদাতিরিক্ত, [[]]নেস্টেড অ্যারে নয় তবে একটি একক আর্গুমেন্ট নিয়মের কারণে খালি অ্যারে তৈরি করুন (আপনাকে [[],]নেস্টেড অ্যারের জন্য লিখতে হবে )। সুতরাং []বন্ধনীগুলির কোনও ভারসাম্যক্রমিক ক্রম ফলস্বরূপ একটি ফাঁকা অ্যারে তৈরি করে যা মিথ্যা বলে প্রমাণিত হয়।
nwellnhof

6

আর , 112 107 99 বাইট

পুনরাবৃত্তি পদ্ধতির। আমরা "<" এবং ">" ব্যবহার করি কারণ এটি রেজেজেমে অক্ষরগুলি এড়ানো যায়। আমাদেরকে ASCII ব্যাপ্তির জন্য আরও একটি সংক্ষিপ্ত স্পেসিফিকেশন ব্যবহারের অনুমতি দেওয়ার জন্য, আমরা "<", "=" এবং ">" এর 3 ^ 2n 2n-চরিত্রের স্ট্রিং তৈরি করি expand.grid(তাদের ASCII কোড 60, 61 এবং 62 এর মাধ্যমে) এবং তারপরে গ্রেপ করব দেখুন যে সংমিশ্রণগুলি সুষম খোলা এবং বন্ধ বন্ধনী দেয়। অবশ্যই "=" সম্ভাব্যতা উপেক্ষা করা হবে।

Http://rachbelaid.com/recursive-regular-experression/ এর মাধ্যমে

function(n)sort(grep("^(<(?1)*>)(?1)*$",apply(expand.grid(rep(list(60:62),2*n)),1,intToUtf8),,T,T))

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

ব্যাখ্যা

"^(<(?1)*>)(?1)*$" = regex for balanced <> with no other characters
^ # match a start of the string
  ( # start of expression 1
    < # open <>
       (?1)* # optional repeat of any number of expression 1 (recursive)
  # allows match for parentheses like (()()())(()) where ?1 is (\\((?1)*\\))
    > # close <>
  ) # end of expression 1
  (?1)* # optional repeat of any number of expression 1
$ # end of string

function(n)
  sort(
    grep("^(<(?1)*>)(?1)*$", # search for regular expression matching open and close brackets
      apply(
        expand.grid(rep(list(60:62),2*n)) # generate 3^(2n) 60,61,62 combinations
      ,1,intToUtf8) # turn into all 3^(2n) combinations of "<","=",">"
    ,,T,T) # return the values that match the regex, so "=" gets ignored
  ) # sort them

আর , 107 বাইট

সাধারণ পুনরাবৃত্তি পদ্ধতির।

-1 ধন্যবাদ @ জিউজ্পে

f=function(n,x=0:1)`if`(n,sort(unique(unlist(Map(f,n-1,lapply(seq(x),append,x=x,v=0:1))))),intToUtf8(x+40))

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


1
আহ, আমি একটি Mapগল্ফ সন্ধান করার চেষ্টা করছিলাম কিন্তু এটি আমার মাথাটি জড়িয়ে রাখতে পারিনি। আমি বিশ্বাস করি না parse+ evalযেহেতু কাজ করতে চলেছে ()()এবং ত্রুটিযুক্ত ত্রুটিগুলি।
জিউসেপ

4

সি (জিসিসি) , 114 বাইট

f(n,x,s,a,i){char b[99]={};n*=2;for(x=1<<n;x--;s|a<0||puts(b))for(s=a=i=0;i<n;)a|=s+=2*(b[n-i]=41-(x>>i++&1))-81;}

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

N <= 15 এর জন্য কাজ করা উচিত।

ব্যাখ্যা

f(n,x,s,a,i){
  char b[99]={};   // Output buffer initialized with zeros.
  n*=2;            // Double n.
  for(x=1<<n;x--;  // Loop from x=2**n-1 to 0, x is a bit field
                   // where 1 represents '(' and 0 represents ')'.
                   // This guarantees lexicographical order.
      s|a<0||puts(b))  // Print buffer if s==0 (as many opening as
                       // closing parens) and a>=0 (number of open
                       // parens never drops below zero).
    for(s=a=i=0;i<n;)  // Loop from i=0 to n-1, note that we're
                       // traversing the bit field right-to-left.
      a|=              // a is the or-sum of all intermediate sums,
                       // it becomes negative whenever an intermediate
                       // sum is negative.
        s+=            // s is the number of closing parens minus the
                       // number of opening parens.
                        x>>i++&1   // Isolate current bit and inc i.
                    41-(        )  // ASCII code of paren, a one bit
                                   // yields 40 '(', a zero bit 41 ')'.
             b[n-i]=               // Store ASCII code in buffer.
          2*(                    )-81;  // 1 for ')' and -1 for '(' since
                                        // we're going right-to-left.
}

4

পাইথন 2 , 91 88 84 81 বাইট

f=lambda n:n and sorted({a[:i]+'()'+a[i:]for a in f(n-1)for i in range(n)})or['']

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

-3 বাইট পিজ্জা প্যান্ট 184 ধন্যবাদ


পাইথন 3 এও কাজ করে, আমি মনে করি
সুপারস্টোরমার

আপনি -3 বাইটের জন্য set(...)একটি সেট বোঝা ( {...}) দিয়ে প্রতিস্থাপন করতে পারেন এটি চেষ্টা করুন অনলাইনে!
pizzapants184

@ পিজ্জাপ্যান্টস 184 ধন্যবাদ :)
টিফিল্ড

3

05 এ বি 1 ই , 13 বাইট

„()©s·ãʒ®õ:õQ

এটি অনলাইনে চেষ্টা করুন বা আরও কিছু পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

„()            # Push string "()"
   ©           # Store it in the register without popping
    s·         # Swap to get the (implicit) input, and double it
      ã        # Cartesian product that many times
       ʒ       # Filter it by:
        ®      #  Push the "()" from the register
         õ:    #  Infinite replacement with an empty string
           õQ  #  And only keep those which are empty after the infinite replacement


3

জাপট, 15 13 বাইট

ç>i<)á Ôke/<>

চেষ্টা করে দেখুন


ব্যাখ্যা

ç                 :Input times repeat the following string
 >i<              :  ">" prepended with "<"
    )             :End repeat
     á            :Get unique permutations
       Ô          :Reverse
        k         :Remove any that return true (non-empty string)
         e/<>     :  Recursively replace Regex /<>/

3

কে (এনএনজি / কে) , 36 35 বাইট

{"()"(&/-1<+\1-2*)#(x=+/)#+!2|&2*x}

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

+!2|&2*x দৈর্ঘ্য 2 * এন এর সমস্ত বাইনারি ভেক্টর

(x=+/)# কেবলমাত্র যেগুলি n এর সমষ্টি

(&/-1<+\1-2*)# যার আংশিক অঙ্কগুলি, 0/1 কে 1 / -1 হিসাবে বিবেচনা করে, তারা কোথাও নেতিবাচক নয়

"()" এই স্ট্রিংয়ে সূচক হিসাবে 0/1 ব্যবহার করুন



2

পার্ল 6 , 42 বাইট

{grep {!S:g/\(<~~>*\)//},[X~] <( )>xx$_*2}

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

একটি পুনরাবৃত্তিমূলক রেজেক্স ব্যবহার করে। বিকল্প বিকল্প:S/[\(<~~>\)]*//

খোলা / বন্ধ চিহ্ন হিসাবে 0 এবং 1 সহ 38 বাইট :

{grep {!S:g/0<~~>*1//},[X~] ^2 xx$_*2}

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

ব্যাখ্যা

{                                        }  # Anonymous block
                              <( )>         # List "(", ")"
                                   xx$_*2   # repeated 2n times
                         [X~]  # Cartesian product with string concat
                               # yields all strings of length 2n
                               # consisting of ( and )
 grep {                },  # Filter strings
        S:g/             # Globally replace regex match
            \(           #   literal (
              <~~>       #   whole regex matched recursively
                  *      #   zero or more times
                   \)    #   literal )
                     //  # with empty string
       !                 # Is empty string?

2

রেটিনা 0.8.2 , 50 বাইট

.+
$*
1
11
+%1`1
<$'¶$`>
Gm`^(?<-1>(<)*>)*$(?(1).)

এটি অনলাইন চেষ্টা করুন! ব্যবহার করে <>এস। ব্যাখ্যা:

.+
$*

অ্যানারিতে রূপান্তর করুন।

1
11

ফলাফল দ্বিগুণ।

+%1`1
<$'¶$`>

2²ⁿ 2n-বিট বাইনারি সংখ্যাগুলির সমস্ত অঙ্ক করুন, অঙ্কগুলিতে ম্যাপিং করুন <>

Gm`^(?<-1>(<)*>)*$(?(1).)

শুধুমাত্র সুষম ক্রম রাখুন। এটি @ মার্টিনএেন্ডার দ্বারা আবিষ্কার করা একটি ভারসাম্য প্রথম বন্ধনী কৌশল ব্যবহার করে।



2

লাল , 214, 184 136 বাইট

func[n][g: func[b n][either n = length? b[if not error? try[load b][print b]return 0][g append copy b"["n g append copy b"]"n]]g""2 * n]

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

জো কিং এর পদ্ধতির ব্যবহার করে। পুনরাবৃত্তির সাহায্যে ব্র্যাকগুলির সমস্ত সম্ভাব্য বিন্যাস সন্ধান করে (এগুলি লিকক্সোগ্রাফিক ক্রমে উত্পন্ন হয়) এবং ব্যবস্থাটি যদি কোনও বৈধ ব্লক হিসাবে মূল্যায়ন করে তবে এটি মুদ্রণ করুন।


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