প্রথম বন্ধনী ম্যাচ সন্ধান করুন


22

ব্রেন-ফ্ল্যাকের জন্মদিন অবধি এটি চ্যালেঞ্জগুলির একটি সিরিজ ছিল। এখানে আরও জানুন ।

চ্যালেঞ্জ

এই চ্যালেঞ্জের জন্য আপনার উদ্দেশ্য হ'ল বন্ধনীগুলির সম্পূর্ণ মিলিত স্ট্রিংয়ের সাথে মেল বন্ধনীগুলির প্রথম জোড়াটি খুঁজে পাওয়া ()[]{}<>। সম্পূর্ণ মিলিত স্ট্রিংয়ের ডিজেএমসিএমহেমের সংজ্ঞা ধার করতে :

  • এই চ্যালেঞ্জের উদ্দেশ্যে, একটি "বন্ধনী" এই অক্ষরের কোন হল: ()[]{}<>

  • খোলার এবং বন্ধ করার বন্ধনীগুলি সঠিক ক্রমে থাকে এবং সেগুলির ভিতরে কোনও অক্ষর না থাকলে, একটি জোড়া বন্ধনী "মিলিত" হিসাবে বিবেচিত হয় as

    ()
    []{}
    

    বা এর অভ্যন্তরে প্রতিটি প্রতিবিম্বের সাথে যদি মিলও হয়।

    [()()()()]
    {<[]>}
    (()())
    

    সুবলিমেন্টগুলি বেশ কয়েকটি স্তরকে গভীরভাবে নেস্ট করা যায়।

    [(){<><>[()]}<>()]
    <[{((()))}]>
    
  • একটি স্ট্রিংকে "সম্পূর্ণ মিলিত" হিসাবে বিবেচনা করা হয় এবং কেবল যদি প্রতিটি বন্ধনীটির সঠিক ক্রমে সঠিক খোলার এবং বন্ধ বন্ধনী থাকে।

ইনপুট

ইনপুটটিতে একটি একক নমনীয় স্ট্রিং বা চর অ্যারে কেবল অক্ষর থাকবে ()[]{}<>এবং এটি সম্পূর্ণরূপে মিলে যাওয়ার গ্যারান্টিযুক্ত। আপনি যে কোনও যুক্তিসঙ্গত পদ্ধতিতে ইনপুট নিতে পারেন যা আমাদের i / o ডিফল্টের সাথে সামঞ্জস্য করে ।

আউটপুট

আপনার প্রোগ্রাম বা ফাংশনের আউটপুটটি বন্ধনীটির সূচক হবে যা প্রথমটি বন্ধ করে দেয়। আউটপুট হয় হয় বা ইনডেক্স করা আবশ্যক । আবার, আউটপুট কোনও যুক্তিসঙ্গত পদ্ধতিতে হতে পারে যা আমাদের i / o ডিফল্টের সাথে সামঞ্জস্য করে ।01

পরীক্ষার মামলা

Input       0-indexed   1-indexed
()          1           2
(<>)        3           4
<[]{<>}>    7           8
{}{}{}{}    1           2
[[]<>[]]    7           8

এটি , সবচেয়ে কম বাইট জয়!




1
এই কৌশলটি বিএফের অদক্ষ বাস্তবায়নের জন্য খুব সহায়ক।
এশোলং ফল

উত্তর:


2

ভি , 4 বাইট

%Dø.

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

এটি, বেশিরভাগ ভি উত্তরগুলির মতো নয়, 0-সূচক ব্যবহার করে। আমি এই উত্তরের জন্য অত্যন্ত গর্বিত, এবং আমার ভাষা কতটা এগিয়ে এসেছে। ব্যাখ্যা:

%       " Jump to the first bracket match
 D      " Delete everything under and after the cursor
  ø     " Count the number of times the following regex is matched:
   .    "   Any character

<> মিলের জন্য আপনার প্রয়োজন বয়লারপ্লেট নেই?
পাভেল

@ পাভেল ইন ভিমে, হ্যাঁ তবে ভি
তে নেই

27

ব্রেন-ফ্লাক , 685, 155, 151 , 137 বাইট

(())({<{}({}()<(()()()())>)({}(<>))<>{(({})){({}[()])<>}{}}{}<>
([{}()]{})(({})){{}({}[()])(<()>)}{}(<>)<>{{}<>{}({}<>)}{}(<>[]<>)>()}<>)

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

কোডের 136 বাইট, প্লাস ওয়ান বাইট -a। একটি সূচকযুক্ত।

530 বাইট গল্ফড! এটি সম্ভবত সবচেয়ে বড় গল্ফ আমি করেছি।

14 বাইট রিলিকে ধন্যবাদ রক্ষা করেছে!

এটি খোলার / বন্ধ হওয়া প্রথম বন্ধনের সূত্রটি অপমান করে: আপনি যদি ASCII মানগুলি গ্রহণ করেন তবে একে একে বাড়িয়ে নিন এবং 4 টির মডুলো নিলে ওপেনাররা ( ({[<) সর্বদা পাবেন 0বা 1অন্যদিকে ক্লোজাররা )}]>সর্বদা 2 বা 3 পাবেন।

ব্যাখ্যা:

#Push 1
(())

#While true
({<

    #Pop stack height
    {}

    #Compute (TOS + 1) % 4
    ({}()<(()()()())>)({}(<>))<>{(({})){({}[()])<>}{}}{}<>([{}()]{})

    #Decrement if positive
    (({})){{}({}[()])(<()>)}{}

    #Push 0 onto alternate
    (<>)

    #Toggle back
    <>

    #Pop two zeros from alternate if closer
    {{}<>{}({}<>)}{}

    #Push height of alternate stack
    (<>[]<>)

#Make each time through evaluate to 1
>()

#Endwhile
}

#Push the number of loops onto the offstack
<>)

8
Godশ্বরের ভালবাসার জন্য, পৃথিবীতে এটি কি।
লিকি নুন

মূলত প্রত্যেকে এখন n-1&2/ n+1&2/ -n&2অথবা n%7&2বন্ধনীর উদ্বোধন এবং বন্ধ করার পার্থক্যটি ব্যবহার করছে ...
ETH প্রোডাকশনগুলি

@ETH প্রোডাকশনগুলি আমি নিশ্চিত না যে মস্তিষ্ক-ফ্লাক দক্ষতার সাথে গণনা করতে পারে কিনা &2তবে আমি এটি সন্ধান করব।
DJMcMayhem

ওহ, আমি ভেবেছিলাম আপনি ছিলেন। আপনি অবশ্যই 0/ 1এবং 2/ এর মধ্যে পার্থক্য করার মতো কিছু করছেন 3... যদিও আমি এখন এটি দেখছি তবে ইতিবাচক হলে আপনি কেবল হ্রাস পাচ্ছেন। পাশাপাশি একটি দুর্দান্ত কৌশল :-)
ETH প্রোডাকশনগুলি


11

05 এ বি 1 ই , 17 16 10 বাইট

কারুসোমপুটিং -1 ধন্যবাদ

-6 আদনানকে তার আশ্চর্য অন্তর্দৃষ্টির জন্য ধন্যবাদ যে "ইনক্রিমেন্ট করার পরে দ্বিতীয় শেষ বিটটি একটি উদ্বোধনী বন্ধনী জন্য 0 এবং একটি বন্ধনী বন্ধনীটির জন্য 1"

Ç>2&<.pO0k

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

Ç          # Get input as ASCII values
 >         # Increment
  2&       # And with 2 (0 for open and 2 for close brackets)
    <      # decrement 
     .p    # prefixes
       O   # Sum
        0k # Print the index of the first 0

žuএখানে ব্যবহারযোগ্য বলে মনে হচ্ছে।
ম্যাজিক অক্টোপাস উরন

žu8ÝÈÏসুতরাং, না, সত্যিই হ্যাঁ না। সর্বোত্তম এটি এখনও 5 বাইট হবে। আমি বন্ধনীগুলির জোড়গুলিতে আরও বিভক্ত হওয়ার কথা ভাবছিলাম এবং প্রতি অপসারণ জোড়াটির জন্য কেবল একটি জোড়া বাকি না হওয়া অবধি বন্ধনীগুলি অপসারণ করি। এটি কম হলেও আমার কোনও ধারণা নেই। এটিএম চেষ্টা করে দেখুন।
ম্যাজিক অক্টোপাস উরন

10 বাইট: Ç>2&<.pO0k
আদনান

1
কেবল ASCII মানগুলি নিয়ে ঘোরাঘুরি । নোট করুন যে ইনক্রিমেন্ট করার পরে, দ্বিতীয় শেষ বিটটি 0একটি খোলার বন্ধনী এবং 1একটি বন্ধনী বন্ধনী জন্য।
আদনান

11

Vim, 23 বাইট

:se mps+=<:>
%DVr<C-a>C1<esc>@"

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

আমি এই উত্তর সম্পর্কে সত্যিই দুঃখিত। এই সমাধানটি সুন্দরভাবে মার্জিত এবং সংক্ষিপ্ত, তবে, ডিফল্টরূপে, ভিম বিবেচনা করে না <এবং >মিলিত হয়, তাই আমার বয়লারপ্লেট কোডের 13 বাইট প্রয়োজন need অন্যথায়, এটি কেবল 10 বাইট হবে।

আমি একটি ভি উত্তর পোস্ট করতাম, তবে এটি কেবলমাত্র একটি বাইট সংক্ষিপ্ত হবে, নামটি পরিবর্তিত Vrহবে Ò, যেহেতু Vrএকটি সাধারণ ভিআইএম-আইডিয়াম।

এটি 1-সূচীবদ্ধ কিন্তু জাভাস্ক্রিপ্টে গার্বেজ পরিবর্তন করে 0-সূচীবদ্ধ করা পরিবর্তিত হতে পারে 1একটি থেকে 0

:se mps+=<:>        " Stupid boilerplate that tells vim to consider `<` and `>` matched
%                   " Jump to the bracket that matches the bracket under the cursor
 D                  " Delete everything from here to the end of the line
  V                 " Visually select this whole line
   r<C-a>           " Replace each character in this selection with `<C-a>`
                    " This conveniently places the cursor on the first char also
         C          " Delete this whole line into register '"', and enter insert mode
          1<esc>    " Enter a '1' and escape to normal mode
                @"  " Run the text in register '"' as if typed. Since the `<C-a>` command
                    " Will increment the number currently under the cursor

1
তারপরে একটি ভি উত্তর পোস্ট করুন :)
এরিক আউটগলফার

10

জেলি , 11 10 9 বাইট

O’&2’+\i0

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

ব্যাখ্যা

এখানে ধারণাটি ছিল এমন একটি "যাদু সূত্র" সন্ধান করা যা বন্ধনী বন্ধনীগুলি থেকে খোলার পার্থক্য করতে পারে। আমি প্রথমে ব্যবহার করেছি O%7&2(যেমন "ASCII কোডটি নিন, মডুলো 7, বিটওয়াইস-এবং 2"), তবে @ETH প্রোডাকশন প্রস্তাবিত O’&2(যা মডিউল 7 কে হ্রাসের সাথে প্রতিস্থাপন করে); উভয়ই এক ধরণের বন্ধনী হিসাবে 0 এবং অন্যটির জন্য 2 ফেরত দেয়। 1 ( ) বিয়োগ করে এই ফলাফলগুলি -1 এবং 1 এ তৈরি করবে।

কোডের বাকি অংশটি +\+\একটি যোগফল যোগফল উত্পাদন করে। যদি বন্ধনীগুলির একটি সেট সঠিকভাবে মিলে যায় তবে এতে একই সংখ্যা -1 এবং 1 এস থাকবে, অর্থাত এটির সমষ্টিগত যোগফল 0 হবে Then তারপরে আমাদের কেবল ফলাফলের তালিকার প্রথম 0 এর সূচকটি ফিরে আসতে হবে; আমরা এটা দিয়ে করতে পারি i0


বন্ধ করার বন্ধনী সনাক্তকরণের জন্য আমরা কীভাবে অনুরূপ পন্থা নিয়েছি তা আকর্ষণীয়। দুর্ভাগ্যক্রমে আমি কেবল একটি নিকৃষ্ট সংস্করণ পেয়েছি:b*2%7>3
2501

আকর্ষণীয় পদ্ধতির! আমি একটি দীর্ঘ উত্তর বিকাশ করেছি (অনুশীলনের জন্য) যা অবশেষে আমি প্রায়োগিকভাবে এটির জন্য গলফ করেছিলাম, আকর্ষণীয়ভাবে যথেষ্ট ব্যতীত, আপনার পোস্টে প্রথম হ্রাসের পরিবর্তে, আমার পরিবর্তে আমার বর্ধন ছিল। :)
হাইপারনিউটারিনো

9

রেটিনা , 26 24 বাইট

M!`^.(?<-1>([[({<])*.)*

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

ফলাফল 1-ভিত্তিক।

ব্যাখ্যা

একটি খুব আলাদা রেটিনা সমাধান যা মূলত একটি একক (এবং খুব পঠনযোগ্য ...) রেজেক্সের উপর ভিত্তি করে। ভারসাম্যপূর্ণ গোষ্ঠীগুলি ব্যবহার করে ভারসাম্যযুক্ত স্ট্রিংগুলির সাথে মেলে জন্য এটি গতকাল আবিষ্কার করা একটি নতুন কৌশল ব্যবহার করে ।

M!`^.(?<-1>([[({<])*.)*

রেগেক্সের সমস্ত ম্যাচ ( M) এবং ফেরত ( !) দিন ^.(?<-1>([[({<])*.)*। এই রেজেক্স স্ট্রিংয়ের প্রথম চরিত্রটি এড়িয়ে যায় এবং তারপরে নীড়ের গভীরতার উপর নজর রাখতে ব্যালান্সিং গ্রুপগুলি ব্যবহার করে। কোন [({<বৃদ্ধি গভীরতা (রাখা একদল ট্র্যাক 1) এবং অন্য কোন চরিত্র গভীরতা কমে যায় (নীতিগতভাবে, .পারবেন গভীরতা পাশাপাশি উদ্বোধনী বন্ধনী কমে গেছে হবে, কিন্তু যেহেতু Regex সাগ্রহে মিলেছে হয়, backtracker প্রচেষ্টা যে হবে না )। একটি অদ্ভুত কৌশলটি (?<-1>...)ঘটিত গ্রুপ 1যা কাজ করে কারণ একটি ভারসাম্যপূর্ণ গ্রুপ থেকে পপিং গ্রুপের শেষে ঘটে । এটি ফর্মের স্ট্যান্ডার্ড পদ্ধতির চেয়ে দুটি বাইট সংরক্ষণ করে((open)|(?<-2>close))*। ম্যাচটি অগত্যা বন্ধনী বন্ধ হয়ে যায় যা প্রথমটি বন্ধ করে দেয়, কারণ আমরা এটি এড়িয়ে চলেছি, সুতরাং এটি স্ট্যাকের গভীরতায় গণ্য হয় না (এবং স্ট্যাকের গভীরতা নেতিবাচক হতে পারে না)।

এই ম্যাচের দৈর্ঘ্য হ'ল আমরা বন্ধনীটির সন্ধান করছি 0-ভিত্তিক সূচক।


এই স্ট্রিংয়ে খালি ম্যাচের সংখ্যাটি সহজেই গণনা করুন। খালি রেজেক্সটি সবসময় স্ট্রিংয়ের অক্ষরগুলির চেয়ে আরও একবার মিলে যায় তাই এটি আমাদের বন্ধনীটির জন্য 1-ভিত্তিক সূচক দেয়।


উজ্জ্বল!
পাভেল

সংক্ষিপ্ত পদ্ধতির : প্রথম অংশটির সাথে মিল না রেখে স্ট্রিংয়ের দ্বিতীয় অংশটি মুছুন। আমি পছন্দ করি আপনি কীভাবে স্ট্রিংয়ের দৈর্ঘ্য পরিমাপ করেছেন, বিটিডাব্লু!
লিও

@ লিও এটি সত্যই ঝরঝরে! আপনি এটি একটি পৃথক উত্তর হিসাবে পোস্ট করতে পারেন :)
মার্টিন এন্ডার

ঠিক আছে, সুষম স্ট্রিংয়ের জন্য এই নতুন কৌশলটি দুর্দান্ত: ডি
লিও

6

রেটিনা , 24 বাইট

.(([[({<])|(?<-2>.))*$


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

এটি মার্টিন ইন্ডারের সমাধান দ্বারা অনুপ্রাণিত ।

ব্যাখ্যা

প্রথম লাইনটি একটি রেজেক্স যা একটি চরিত্রের সাথে মিলে যায় যার পরে ভারসাম্যযুক্ত স্ট্রিংটি মূল স্ট্রিংয়ের শেষ প্রান্তে চলে যায় (এই রেজেজেটে কীভাবে ভারসাম্য রক্ষাকারী দলগুলি মার্টিনের উত্তর দেখুন সে সম্পর্কে বিস্তারিত বিশদের জন্য)। যেহেতু রেজিজেসগুলি বাম থেকে ডানদিকে ম্যাচগুলি সন্ধান করে, এটি দীর্ঘতম সুষম যথাযথ উপ-ফিক্সটি খুঁজে পাবে, এটি বন্ধনীটির পরে সবকিছু যা প্রথমটি বন্ধ করে দেয়, বন্ধনী নিজেই।

নিম্নলিখিত লাইনটি খালি, সুতরাং আমরা ম্যাচটি একটি খালি স্ট্রিংয়ের সাথে প্রতিস্থাপন করব যার অর্থ এখন আমাদের কেবলমাত্র (0-indexed) পছন্দসই ফলাফল পেতে বাকি অক্ষরগুলি গণনা করতে হবে।

সর্বশেষ ফাঁকা রেখাটি স্ট্রিংয়ের খালি স্ট্রিংয়ের মিলগুলির সংখ্যা গণনা করে, যা স্ট্রিংয়ের অক্ষরের সংখ্যার চেয়ে এক বেশি, 1-সূচকযুক্ত ফলাফলের সমতুল্য।


গতকাল আমি সুষম স্ট্রিং মিলে একটি নতুন কৌশল যা আমাদের উত্তর উভয় দুটি বাইট সংরক্ষণ পাওয়া যায়নি: tio.run/##K0otycxL/K@q4Z7wX0/D3kbX0E4jOlqj2iZWU0tPU0uFi@v/... (এবং সম্ভবত একটি ডজন অন্যান্য বেশী আমি লিখেছি অতীত ...)
মার্টিন ইন্ডার

5

পার্ল 5 , 28 বাইট

মার্টিন ইন্ডার থেকে কেবল .পরিবর্তে 6 বাইট ব্যবহার করে সংরক্ষণ করা হয়েছে[>})\]] রেটিনা উত্তর

27 বাইট কোড + -pপতাকা।

/([<{([](?0)*.)+?/;$_=$+[0]

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

রিকার্সিভ রেজেক্স, কী সুন্দর আবিষ্কার।
রেজেক্স একটি খোলার ব্র্যাকেট ( [<{([]) সন্ধান করবে, তারপরে रिकর্সিভ কল ( ?0) এবং তারপরে একটি বন্ধনী বন্ধনী ( .)। এই সমস্ত অ-লোভজনকভাবে ( +?) তাই এটি প্রথম থেকেই যতটা সম্ভব সংক্ষিপ্তভাবে মেলে। ম্যাচের শেষের সূচকটি উত্তর, এবং এটি হওয়ার সাথে সাথে এটি সন্ধান করা যেতে পারে $+[0]


4

জাভাস্ক্রিপ্ট (ES6), 55 53 52 বাইট

@ আদনানকে ধন্যবাদ 1 বাইট সংরক্ষিত

f=([c,...s],i=1)=>(i-=-c.charCodeAt()&2)&&1+f(s,++i)

প্রতিটি খোলার বন্ধনীটির জন্য, এর চার-কোড মোড 4 নেওয়া আমাদের 0 বা 3 দেয়; বন্ধনী বন্ধনীগুলির জন্য এটি আমাদের 1 বা 2 দেয় Therefore যে n&2,।


আমি মনে করি যে পরিবর্তে n-1&2, -n&2এছাড়াও কাজ করে?
আদনান

@ আদনান হুম, আমি মনে করি আপনি ঠিক বলেছেন ধন্যবাদ!
ETH প্রোডাকশনস

4

সি, 75 72 56 55 54 45 বাইট

a;f(char*s){return(a-=(-*s++&2)-1)?1+f(s):0;}

এটি অনলাইনে কাজ দেখুন ।

আপনি যদি চান পরিবর্তে 0-ইন্ডেক্স 1-সূচীবদ্ধ করা আউটপুট, গত প্রতিস্থাপন 0সঙ্গে 1


4

পাইথন 2.7 + নম্পি, 85 79 বাইট

কোড গল্ফে আমার প্রথম প্রচেষ্টা:

from numpy import*
lambda s:list(cumsum([(ord(x)+1&2)-1for x in s])).index(0)

1
সাইটে স্বাগতম!
ডিজেএমসিএমহেম

1
আপনাকে ল্যাম্বডাসের নাম রাখতে হবে না, আপনি g =
পাভেল

4

মস্তিষ্ক-ফ্লাক , 97 বাইট

{}<>(())({<(<()>)<>({<({}[()])><>([{}]())<>}{})<>(<{}>())<>{({}[()])<>([{}])<>}{}<>({}{})>()}{})

-aপতাকা নিয়ে দৌড়াও।

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

ব্যাখ্যা:

#Skip the first open bracket 
{}

#Place a 1 on stack B, representing the nesting depth
<>(())

#Start a loop, until the depth is 0
({<

 #Divide the ASCII code by 2, rounding up
 (<()>)<>({<({}[()])><>([{}]())<>}{})<>

 #Replace TOS B with a 1
 (<{}>())

 #Swap back to stack A
 <>

 #Negate the 1 on stack B n times (n = ASCII value+1/2)
 {({}[()])<>([{}])<>}{}

 #Swap back to stack B
 <>

 #Add the 1/-1 (depending on Open/close bracket) to the nesting depth accumulator
 ({}{})

 #Count loop cycles
 >()

#end loop, print result implicitly by pushing to the stack 
}{}) 

এটা ঠিক কাজ করে, ঠিক আছে।


3

রেটিনা , 34 বাইট

^.
!
T`([{}])`<<<>
+T`p`!`<!*>
\G!

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

ফলাফল 0-ভিত্তিক।

ব্যাখ্যা

^.
!

প্রথম অক্ষরটি একটি দ্বারা প্রতিস্থাপন করুন !। এর ফলে আমরা বন্ধনীটি খুঁজছি যা মেলে না।

T`([{}])`<<<>

বন্ধনী, স্কোয়ার বন্ধনী এবং ধনুর্বন্ধনীকে কোণ বন্ধনীগুলিতে রূপান্তর করুন। যেহেতু স্ট্রিংটি সম্পূর্ণরূপে মিলে যাওয়ার গ্যারান্টিযুক্ত, তাই আমরা প্রকৃত প্রকারগুলি সম্পর্কে মোটেই পাত্তা দিই না এবং এটি পরবর্তী ধাপে কিছু বাইট সংরক্ষণ করে।

+T`p`!`<!*>

বার বার ( +) এর <!*>সাথে সমস্ত ম্যাচে প্রতিটি অক্ষর প্রতিস্থাপন করুন !। এটি হ'ল আমরা জোড়া বন্ধনীগুলির সাথে মেলে যাতে আর কোনও প্রক্রিয়াজাতকরণ বন্ধনী নেই এবং সেগুলি আরও বিস্মৃত চিহ্নগুলিতে পরিণত করে। এটি মিলহীন বন্ধনী বন্ধনী ব্যতীত পুরো স্ট্রিংটিকে বিস্মৃত চিহ্নগুলিতে পরিণত করবে।

\G!

শীর্ষস্থানীয় বিস্ময়কর চিহ্নগুলির সংখ্যা গণনা করুন, যা প্রথম অ-বিস্মরণ-চিহ্নের (অর্থাৎ তুলনাহীন বন্ধনী) এর 0-ভিত্তিক পদের সমান। \Gনোঙ্গর আগের, যা কেন এই গণনা করা হয় না প্রতিটি ম্যাচ !বলেন বন্ধনী পরে সে।


আমি দেখেছি আপনি হোম পৃষ্ঠায় উত্তর দিয়েছিলেন এবং জানতেন যে এটি কোনও প্রকার রেগেক্স ব্যবহার করতে চলেছে
ক্রিস্টোফার

ক্রিস্টোফার এহ, এটি সবেমাত্র কোনও রেজেেক্স ব্যবহার করে (যেমনটি আমি রেজিষ্ট্রি করা অন্যান্য রেটিনার উত্তরের বিপরীতে ...)।
মার্টিন এন্ডার

Sheesh। রেগেক্স অনেক?
ক্রিস্টোফার

কেন করা হয় না এই কাজ?
লিকি নুন

@LeakyNun কারণ (?!(2))ঠিক হয় (?!2)। আপনি সম্ভবত বোঝানো (?(2)(?!))বা (?2)!)। আপনি এড়াতেও ভুলে গেছেন ]এবং চূড়ান্ত হওয়া +দরকার *
মার্টিন এন্ডার

2

পিএইচপি, 116 বাইট

for($l=["("=>")","["=>"]","{"=>"}","<"=>">"][$f=$argn[0]];;$d>0?$i++:die("$i"))$d+=$f!=($n=$argn[$i])?$n==$l?-1:0:1;

অনলাইন সংস্করণ


পিএইচপি দিয়ে শুরু করার দরকার নেই <?php?
পাভেল

@ ফিনিক্স: এখানে একটি পৃথক পিএইচপি ইন্টারপ্রেটার রয়েছে যার শুরুতে ট্যাগের প্রয়োজন হয় না। এটি সাধারণত গল্ফিংয়ের জন্য ব্যবহৃত হয়।

@ ais523 এক্ষেত্রে পিএইচপি কমান্ড লাইন থেকে -আর বিকল্পের সাথে চলে
জার্গ হালসারম্যান

2

পাইথন , 76 বাইট

f=lambda s,r=[],i=0:(i<1or sum(r))and f(s[1:],r+[(ord(s[0])+1&2)-1],i+1)or i

রিকার্সিভ ফাংশন যা আদনান (এবং সম্ভবত অন্যরা) দ্বারা পাওয়া অনেকের ব্যবহৃত ওপেন বনাম ক্লোজ ট্রিকের জন্য পতাকা হিসাবে অর্ডিনাল ২ য় এলএসবি ব্যবহার করে। লেজ হিট হয় যখন -1খোলা এবং 1বন্ধের সমষ্টিগত যোগফল শূন্যে পৌঁছায়। ব্যবহারের চেয়ে বাইট-সস্তার হিসাবে সূচকটি একটি পরিবর্তনশীল হিসাবে রাখা হয়, সূচকটি len(r)1-ভিত্তিক।

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


2

রুবি, 35 34 বাইট

p$_[/[<{(\[](\g<0>)*[>})\]]/].size

দাদার পার্ল 5 উত্তরের ভিত্তিতে । আউটপুটটি 1-সূচকযুক্ত। রুবি ইন্টারপ্রেটারটি -nবিকল্পটির সাথে অনুরোধ করা প্রয়োজন (অন্তর্ভুক্ত)while gets লুপ) ।

সম্পাদনা করুন: এটিও 35 34 বাইট, তবে এই উত্তরটি আরও কমিয়ে আনার আর একটি সম্ভাব্য সূচনা পয়েন্ট point

p$_[/[<{(\[](\g<0>)*[>})\]]/]=~/$/

সম্পাদনা 2: অপ্রয়োজনীয় স্থানগুলি পরে সরিয়ে ফেলা হয়েছে p

সম্পাদনা 3: আরও কয়েকটি 34-বাইট উত্তর।

~/[<{(\[](\g<0>)*[>})\]]/;p$&.size
p~/[<{(\[](\g<0>)*[>})\]]/+$&.size

2
পিপিসিজিতে আপনাকে স্বাগতম!
পাভেল

1
অনেক প্রশংসিত! :)
রায় হামেল

2

পাইথন 3 , 59 55 50 49 বাইট

f=lambda s,n=1:n and-~f(s[1:],n+1-(-ord(s[1])&2))

আউটপুট 0-সূচকযুক্ত। বন্ধনী দিক নির্ধারণের সূত্রটি প্রথমে @ETHProductions দ্বারা আবিষ্কার করা হয়েছিল এবং @ আদনান দ্বারা উন্নত হয়েছিল।

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


1

ব্যাচ, 172 বাইট

@set/ps=
@set/ai=d=0
:l
@set/ai+=1,d-=1
@set c="%s:~,1%"
@set "s=%s:~1%
@for %%a in ("<" "(" "[" "{")do @if %%a==%c% set/ad+=2&goto l
@if %d% gtr 0 goto l
@echo %i%

1-ইন্ডেক্স। <>গুলি অবশ্যই ব্যাচের বিশেষ চরিত্রের তাই কেবল আমাকে পুরোটা উদ্ধৃত করতে হবে না তবে আমি তাদের gotoলেবেল তৈরির কৌশলও করতে পারি না ।


1

আর, 126 বাইট

s=readline();i=0;r=0;for(c in strsplit(s,"")[[1]]){if(grepl("[\\[\\(\\{<]",c))i=i+1 else i=i-1;if(i==0){print(r);break};r=r+1}

0

সি, 127 বাইট

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

c(x){x-40&x-60&x-91&x-123?-1:1;}
f(i,t)char*t;{return i?f(i+c(*t),t+1):t;}
s(char*t){return f(c(*t),t+1)-t;}

আউটপুট

2   ()
4   (<>)
8   <[]{<>}>
2   {}{}{}{}
8   [[]<>[]]

কোন মন্তব্য, ডাউনভোটার।
খালেদ.কে

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