গল্ফ এ প্যারেন্টিহিসের সাথে ম্যাচিং অ্যালগরিদম


25

আপনাকে একটি স্ট্রিং দেওয়া হবে s। এটি গ্যারান্টিযুক্ত যে স্ট্রিংয়ের সমান এবং কমপক্ষে একটি [গুলি এবং ]গুলি রয়েছে। বন্ধনীগুলি ভারসাম্যযুক্ত এমনটিও গ্যারান্টিযুক্ত। স্ট্রিংয়ের অন্যান্য অক্ষরও থাকতে পারে।

উদ্দেশ্য হ'ল টিপলগুলির একটি তালিকা বা প্রতিটি [এবং ]জুটির সূচকযুক্ত তালিকার একটি তালিকা আউটপুট / ফিরিয়ে দেওয়া ।

দ্রষ্টব্য: স্ট্রিংটি শূন্য-সূচকযুক্ত।

উদাহরণ: !^45sdfd[hello world[[djfut]%%357]sr[jf]s][srtdg][]ফিরে আসা উচিত

[(8, 41), (20, 33), (21, 27), (36, 39), (42, 48), (49, 50)]বা এর সমতুল্য কিছু। Tuples প্রয়োজন হয় না। তালিকাগুলিও ব্যবহার করা যেতে পারে।

পরীক্ষার কেস:

input:[[asdf][][td([)ty54g% ]hg[[f]u][f[[jhg][gfd]sdf]sdfs]ghd]fr43f]
output:[(0, 62),(1, 6), (7, 8), (9, 56), (13, 22), (25, 30), (26, 28), (31, 52), (33, 47), (34, 38), (39, 43)]
input:[[][][][]][[][][][[[[(]]]]]))
output:[(0, 9), (1, 2), (3, 4), (5, 6), (7, 8), (10,26),(11, 12), (13, 14), (15, 16), (17, 25), (18, 24), (19, 23), (20, 22)]
input:[][][[]]
output:[(0, 1), (2, 3), (4, 7), (5, 6)]
input:[[[[[asd]as]sd]df]fgf][][]
output:[(0, 21), (1, 17), (2, 14), (3, 11), (4, 8), (22, 23), (24, 25)]
input:[]
output:[(0,1)]
input:[[(])]
output:[(0, 5), (1, 3)]

এটি , তাই প্রতিটি প্রোগ্রামিং ভাষার জন্য বাইটের মধ্যে সংক্ষিপ্ততম কোড জিততে পারে।


1
আউটপুট অর্ডার ব্যাপার না?
wastl

1
না, এটা না।
উইন্ডমিল কুকিজ

21
"দ্রষ্টব্য: স্ট্রিংটি শূন্য-সূচকযুক্ত" " - বাস্তবায়নগুলিকে এই ধরণের চ্যালেঞ্জগুলির মধ্যে একটি ধারাবাহিক সূচক নির্বাচন করার অনুমতি দেওয়া খুব সাধারণ (তবে এটি অবশ্যই আপনার উপর
জোনাথন অ্যালান

1
আমরা কি অক্ষরের অ্যারে হিসাবে ইনপুট নিতে পারি?
শেগি

7
এক বাইট ব্যয় করুন ...
dylnan

উত্তর:


13

ব্রেন-ফ্লাক ক্লাসিক , 108 বাইট tes

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

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

প্রতিটি খোলারকে [ডান স্ট্যাকের মধ্যে সঞ্চয় করে এবং যখনই আমরা এটিকে আঘাত করি তখন আউটপুটগুলি ]



5

জাভাস্ক্রিপ্ট, 69 62 বাইট

ট্রেনের বাড়ীতে একটি গল্ফ তাড়াতাড়ি। সম্ভবত উন্নতি করা যেতে পারে।

অক্ষরের অ্যারে হিসাবে ইনপুট নেয় এবং কীগুলির [গুলি এবং এর মানগুলি তাদের সম্পর্কিত এসগুলির সূচক হিসাবে কীগুলির সাথে আউটপুট দেয় ]

a=>a.map((x,y)=>x==`]`?o[a.pop()]=y:x==`[`&&a.push(y),o={})&&o

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


এটি আমার মনকে ফুটিয়ে তোলে যে আপনি মোবাইলে গল্ফ করতে পারেন। : পি
অলিভার

2
@Oliver, এটা আমার মন হাতাহাতি যে আমি করতে পারেন (প্রায়) টাচস্ক্রীন টাইপ এ সব - ফিরে কীবোর্ড আনা!
শেগি

4

হাস্কেল , 92 79 বাইট

g(u:a)n(']':x)=(u,n):g a(n+1)x
g a n(s:x)=g([n|s=='[']++a)(n+1)x
g[]_[]=[]
g[]0

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

ব্যাখ্যা

আমরা একটি ফাংশন তৈরি করি gযা 3 টি আর্গুমেন্ট নেয়।

  • a, যা সমস্ত মিলহীন [এর অবস্থান ।

  • n, যা প্রক্রিয়া করা অক্ষরের সংখ্যা

  • x যা অক্ষরহীন হয়।

যদি আমাদের প্রথম চরিত্রটি হয় তবে ]আমরা uসামনে থেকে অপসারণ করি aএবং ফিরে (u,n)যা কিছু বাকি রয়েছে তা ফিরে আসি।

g(u:a)n(']':x)=(u,n):g a(n+1)x

যদি আমাদের প্রথম চরিত্রটি না হয় ], তা হয় হয় [বা অন্য কোনও কিছু, আমরা বাড়িয়ে তুলি nএবং [n|s=='[']এর সামনের অংশে যুক্ত করি a[n|s=='[']হতে হবে [n]যদি s=='['এবং []অন্যথায়।

g a n(s:x)=g([n|s=='[']++a)(n+1)x

যদি আমরা অক্ষরের বাইরে থাকি তবে আমরা খালি তালিকাটি ফিরিয়ে দেব।

g[]_[]=[]

1
বাহ, recursive ফাংশন কিছু সুন্দর টুকরা thats। আমি হাস্কেলের একজন শিক্ষানবিস, এটি আমাকে মুগ্ধ করেছে :)
উইন্ডমিল কুকিজ

@ gnu- কেউই ধন্যবাদ! এই উত্তরটি সম্ভবত সর্বোত্তম নয়, তাই আমি আপনাকে এটি চেষ্টা এবং প্রহার করতে উত্সাহিত করব, বা গুরুতর হাস্কেল গল্ফারদের আগমন পর্যন্ত অপেক্ষা করব।
গম উইজার্ড

মারাত্মক হাস্কেল গল্ফার না আসা পর্যন্ত আমি আরও অপেক্ষা করতাম
উইন্ডমিল কুকিজ

4

জাভা 10, 95 বাইট

একটি অকার্যকর ল্যাম্বদা int[]ইউনিকোড কোড পয়েন্টগুলির একটি হিসাবে ইনপুট স্ট্রিং গ্রহণ করে ।

s->{int r=0,w=0;for(var c:s){if(c==91)s[w++]=r;if(c==93)System.out.println(s[--w]+","+r);r++;}}

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

Ungolfed

s -> {
    int r = 0, w = 0;
    for (var c : s) {
        if (c == 91)
            s[w++] = r;
        if (c == 93)
            System.out.println(s[--w] + "," + r);
        r++;
    }
}

প্রাপ্তি স্বীকার

  • স্ট্রাক হিসাবে ইনপুট স্ট্রিংটি ব্যবহার করার ধারণার জন্য জোনাথন ফ্রেঞ্চকে ধন্যবাদ ( এখানে )

আপনি সংজ্ঞায়িত করতে হবে rএবং wকোডের অংশ হিসেবে পরামিতি হিসেবে নয়: s->{int r=0,w=0;...}
অলিভিয়ার গ্রাগোয়ার

@ OlivierGrégoire দ্ব্যর্থক ধরনের, কিন্তু এই এটা দেখে মনে হচ্ছে একাধিক খালি ইনপুট আবরণ জন্যই ছিল।
জাকব

1
আপনি যে উত্তরটি উদ্ধৃত করেছেন তা স্পষ্টভাবে এই প্রশ্নের উত্তর দেয় "" আমরা কোথাও ব্যবহার করব না তার পরিবর্তে কি খালি প্যারামিটার নিতে আমাদের অনুমতি দেওয়া হচ্ছে ? " আপনি এই ইনপুট ব্যবহার করছেন। আমি এখানে মোটেও অস্পষ্টতা দেখছি না।
অলিভিয়ার গ্রাগোয়ার

প্রশ্নের সম্পাদনার অংশটি ভেরিয়েবল সম্পর্কে "অ-ব্যবহার" সম্পর্কে একেবারেই দ্ব্যর্থহীন করে তোলে।
অলিভিয়ার গ্রাগোয়ার

ঠিক আছে, তবে তারপরে কেন শীর্ষ উত্তর (1) ইনপুটগুলি অব্যবহৃত রয়েছে তা উল্লেখ করে না, (২) অতিরিক্ত ইনপুটগুলির মানগুলি কী তা নির্দিষ্ট করে এবং (3) অতিরিক্ত ইনপুটগুলিকে অপব্যবহারের সম্ভাবনার উল্লেখ করে? নির্বিশেষে, আমি ভেরিয়েবলগুলি স্থানান্তর করব।
জাকব

4

vim, 89 বাইট

:s/\(.\)/\1<C-V><C-M>/g|g/^\[/ :norm %mm%:pu! =line('.').','.line(\"'m\")<C-V><C-M><C-X>$<C-X>J
:v/\[/d|%s/\[//g

সটীক

:s/\(.\)/\1<C-V><C-M>/g            " one character per line
|g/^\[/                            " for each opening square bracket:
  :norm %mm%                       "   mark the line with the matching bracket
  :pu! =line('.').','.line(\"'m\") "   write the line numbers to preceeding line
  <C-V><C-M><C-X>$<C-X>J           "   convert to 0-based counting and join lines
:v/\[/d                            " remove all non-opening bracket lines
|%s/\[//g                          " remove brackets

<C-V>0x16 হয়। <C-M>0x0d হয়। <C-X>0x18 হয়।

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


4

কিউবাসিক (কিউবি 64), 137 127 112 বাইট

INPUT a$
for i=0to len(a$)
c$=mid$(a$,i+1,1)
if"["=c$then
b(n)=i
n=n+1
elseif"]"=c$then
n=n-1
?b(n),i
endif
next

আমাদের চারটি বাইট প্রয়োজন কারণ চ্যালেঞ্জটির 0-সূচি প্রয়োজন। আমার প্রথম কিউবাসিক পোস্ট, প্রতিক্রিয়া প্রশংসা করা হয়।

  • স্টেনবার্গকে 10 বাইট ধন্যবাদ
  • 3 বাইট আউটগলফার এরিককে ধন্যবাদ
  • ইউনিক্স ফাইল ফর্ম্যাটে সংরক্ষণ করে 12 বাইট ( \r\n-> \n)

মৃত্যুদন্ড কার্যকর করার সময় এটির মতো দেখাচ্ছে:

এটা দেখতে কেমন


সুন্দর. পয়েন্টারের দু'টি: এর ?পরিবর্তে ব্যবহার করুন print(সংকলকটি এতে স্বয়ংক্রিয়ভাবে প্রসারিত হয় print), আপনার উদ্ধৃত স্ট্রিংগুলির মধ্যে এবং এর THENমধ্যে ফাঁকা স্থানগুলির প্রয়োজন নেই IFএবং আপনি iপরে ড্রপ করতে পারেন NEXT
স্টেইনবার্গ

@ সতেরবার্গ হুহ, মনে হচ্ছে আমি সাদা স্থান সরিয়ে নিতে ভুলে গিয়েছি ... তবে আমি 0এবং এর মধ্যে একটি সরিয়ে দিয়েছি to? আমি বিভ্রান্ত ...
wastl

1
কিউবি about64 সম্পর্কে নিশ্চিত নয়, তবে আমি মনে করি , if c$="["হয়ে উঠতে পারে if"["=c$, পরিণত elseif c$="]"হতে পারে elseif"]"=c$, end ifহয়ে উঠতে পারে endif, এবং আউটপুটে সামান্য পরিবর্তন আনলে , ?b(n),iহয়ে উঠতে পারে ?b(n)i(কিউ বেসিক ১.১ যা আমি ব্যবহার করি তা আপনার ক্ষেত্রে ভিন্ন হতে পারে)।
এরিক আউটগল্ফার

@ এরিকথ আউটগল্ফার সবই কিন্তু ?b(n)iকাজ করেছেন
wastl

3

পাইথ, 26 বাইট

VQIqN\[=+YZ)IqN\],.)YZ)=hZ

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

ব্যাখ্যা

VQIqN\[=+YZ)IqN\],.)YZ)=hZ
VQ                     =hZ   For each character in the input (indexed by Z)...
  IqN\[=+YZ)                 ... if the character is [, add the index to Y...
            IqN\],.)YZ)      ... if the character is ], output the previous index
                             and current index.

নিস! আমার নির্বোধ পন্থা ছিল 36 বাইট C,x"[" MQ #.e*qb\[t+lhfSI/LT"[]"._>Q,। সম্পাদনা: আমি আমার বেশ একটু খুব golfing সফল, আমি নিচে 30. এখন আছি
জনাব Xcoder

3

আর , 141 133 115 112 108 বাইট

function(y,x=utf8ToInt(y)){for(i in seq(x)){if(x[i]==91)F=c(i,F);if(x[i]==93){T=c(T,F[1],i);F=F[-1]}};T[-1]}

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

বিশেষ কিছু না. 1-ইনডেক্সেড, কারণ আমি তাই বলেছি। আর সত্যিই, স্ট্যাকগুলি আছে না তাই আমি মূলত ব্যবহৃত c, headএবং tailএকই আক্ষরিক এফেক্ট পেতে। অবহেলিত মূল সংস্করণ ( utf8ToIntস্ট্যাকের শীর্ষ হিসাবে ভেক্টরটির সূচনাটি ব্যবহার করে কিছু বাইট অপসারণ করে আপডেটগুলি , এবং স্ট্যাকগুলি আরম্ভ করতে এড়াতে গালিগালাজ TFবিল্টিনগুলি ব্যবহার করে updates):

f <- function(y, x=el(strsplit(y,""))) {
  p <- l <- NULL
  for(i in seq_along(x)) {
    if(x[[i]]=='[') {
      p <- c(p, i)
    }
    if(x[[i]]==']') {
      l <- c(l, tail(p, 1), i)
      p <- head(p, -1)
    }
  }
  l # Because I said so. Change to l-1 if you want to check the test cases.
}


এবং এর 1:nchar(y)চেয়ে কম seq_along(x)। খুব সুন্দর সমাধান
বিটিডাব্লু

আমি ভাবছি কি gregexprউপায় আছে কিনা ?
এনজিএম

আমি প্রথমে এই পদ্ধতির সদ্ব্যবহার করার চেষ্টা করেছি কিন্তু আমি নিশ্চিত নই যে এটি এখানে সঠিক উপায়।
জয়সি

জেসি সমাধানটি ত্রুটিযুক্ত (ফলাফলটি দেখুন, এটি 22 28 22পরিবর্তে ফিরে আসে 22 28 21) সম্ভবত টি / এফ ব্যবহার (আব) সত্যিই নিরাপদ নয়: ডি। এটি সংক্ষিপ্ত এবং কাজ করছে বলে মনে হচ্ছে -> এটি অনলাইনে চেষ্টা করে দেখুন!
ডিসেম্বর এমিএলএল

2

ফোর্থ (গফার্থ) , 75 বাইট

: f 0 do dup i + c@ dup 91 = if i s>f then 93 = if f>s . i . cr then loop ;

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

ভাসমান-পয়েন্ট স্ট্যাকটিকে আপত্তিজনক ব্যবহার করে do loopতবে কোডটি (ম্যানুয়ালি) রিটার্ন স্ট্যাকের স্পর্শ না করে এমনটি ব্যবহার করার অনুমতি দেয় ।

ব্যাখ্যা

  1. স্ট্রিংয়ে অক্ষরের মধ্য দিয়ে লুপ করুন
  2. প্রতিটি চরিত্র পরীক্ষা করুন
    1. সমান হলে [, ভাসমান পয়েন্ট স্ট্যাক লাগান
    2. যদি ]বর্তমান অবস্থানের সাথে ভাসমান পয়েন্ট স্ট্যাক এবং আউটপুট থেকে পপ সমান হয়

কোড ব্যাখ্যা

0 do                 \ start a loop from 0 to string-length
  dup                \ duplicate the starting address to avoid losing it
  i + c@             \ get the address of the current position and retrieve the character
  dup                \ duplicate the character, to allow checking twice
  91 = if            \ if char = [
    i s>f            \ store the current address on the floating point stack
  then               \ end the if-statement
  93 = if            \ if char = ]
    f>s .            \ pop the starting position from the float-stack and print
    i .              \ print the current position
    cr               \ output a newline
  then               \ end the if-statement
loop                 \ end the loop

2

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

L$v`\[((\[)|(?<-2>])|[^]])*
$.`,$.>`

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

L

ম্যাচের ফলাফলগুলি থেকে একটি তালিকা তৈরি করুন।

$

ম্যাচের পরিবর্তে তালিকা তৈরি করতে নিম্নলিখিত বিকল্পটি ব্যবহার করুন।

v`

মিলগুলি ওভারল্যাপ করার অনুমতি দিন।

\[((\[)|(?<-2>])|[^]])*

এটি .NET এর ব্যালেন্সিং গ্রুপগুলির একটি অ্যাপ্লিকেশন। [আক্ষরিক মিলেছে হয়, সম্ভব হিসাবে অনেক অক্ষর খাওয়া হয় তারপর হিসাবে। প্রতিটি পরবর্তীটি [মিলে যাওয়ার সাথে ম্যাচটি $2স্ট্যাকের সাথে যুক্ত করা হয় । যদি সেই স্ট্যাকটি খালি না থাকে, তবে আমরা ]স্ট্যাকটি থেকে ম্যাচটি সরিয়ে একটি মেলতে পারি। অন্যথায়, আমরা এমন কোনও কিছু মেলতে পারি যা একটি নয় ](এটি [ইতিমধ্যে মেলে)। ম্যাচটি বন্ধ হয়ে যায় যখন এটি ম্যাচের সাথে ]মিলিত হয় [, যেহেতু $2স্ট্যাকটি এখন (এখন) খালি খালি।

$.`,$.>`

সাবসিটিউশনটি কমা দ্বারা পৃথক দুটি ভেরিয়েবল নিয়ে গঠিত। .ইঙ্গিত করে যে পরিবর্তনশীল এর দৈর্ঘ্য, বরং তার মানের চেয়ে, ব্যবহার করা। >ইঙ্গিত করে যে পরিবর্তনশীল ম্যাচ ডানদিকের বিভাজক বদলে পরিপ্রেক্ষিতে মূল্যায়ন করা উচিত। $`পরিবর্তনশীল ম্যাচ, যার মানে তার প্রিফিক্স বোঝায় $.`অবস্থান দেয় [; >ম্যাচ ডান বিভাজক, যা ম্যাচিং অবস্থান দেয় তার প্রিফিক্স পরিবর্তক গন্ধে পরিবর্তন এই ]


2

জেলি ,  22 21 20  19 বাইট

কোনও সন্দেহ নেই জেলিতে এটি অর্ধেক বাইট গণনাতে সম্ভব: পি ...

n€Ø[ḅ-µMịÄÐƤi€0ĖƊ’Ä

একটি মোনাডিক লিঙ্ক অক্ষরের একটি তালিকা গ্রহণ করে যা পূর্ণসংখ্যার তালিকার একটি তালিকা প্রদান করে।
সম্পূর্ণ প্রোগ্রাম হিসাবে এটি একটি স্ট্রিং গ্রহণ করে এবং উল্লিখিত তালিকার একটি উপস্থাপনা মুদ্রণ করে।

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

কিভাবে?

n€Ø[ḅ-µMịÄÐƤi€0ĖƊ’Ä - Link: list of characters    e.g. "[f[o]o!]"
  Ø[                - list of characters = ['[', ']']
n€                  - not equal? for €ach              [[0,1],[1,1],[0,1],[1,1],[1,0],[1,1],[1,1],[1,0]]
                    -     ...relating to the characters:  [     f     [     o     ]     o     !     ]
    ḅ-              - convert from base -1             [1,0,1,0,-1,0,0,-1]
                    -     ...i.e.: 1 where '['; -1 where ']'; and 0 elsewhere
      µ             - start a new monadic chain with that as the argument, say V
                Ɗ   - last 3 links as a monad (function of V):
          ÐƤ        -   for post-fixes:
         Ä          -     cumulative sum               [[1,1,2,2,1,1,1,0],[0,1,1,0,0,0,-1],[1,1,0,0,0,-1],[0,-1,-1,-1,-2],[-1,-1,-1,-2],[0,0,-1],[0,-1],-1]
            i€0     -   1st index of 0 in €ach (or 0)  [8,1,3,1,0,1,1,0]
               Ė    -   enumerate                      [[1,8],[2,1],[3,3],[4,1],[5,0],[6,1],[7,1],[8,0]]
       M            - maximal indices of V             [1,3]
        ị           - index into                       [[1,8],[3,3]]
                 ’  - decrement                        [[0,7],[2,2]]
                  Ä - cumulative sum (vectorises)      [[0,7],[2,4]]

আমি ব্যবহার করার চেষ্টা করছিলাম œ¿এবং এর আত্মীয় কিন্তু সমাধান খুঁজে পেল না। এটি আমার কাছে সবচেয়ে কাছের ছিল।
dylnan

হ্যাঁ, এটি খাটো হতে পারে তবে আমি কেবলমাত্র একটি ম্যাসিট বাইট পরিচালনা করেছি , অর্ধেক বাইট না। এটি এখনও অনেক দীর্ঘ অনুভব করে। :(
এরিক আউটগল্ফার

@ এরিকথ আউটগল্ফার এখানে খুব সহজেই 1 বাইট সংরক্ষণ করতে পারেন
জোনাথন অ্যালান

2

এসডাব্লুআই-প্রোলোগ 254 বাইট

d([']'|T],I,[S|Z],M,R):-J is I+1,d(T,J,Z,[',','(',S,',',I,')'|M],R).
d(['['|T],I,S,M,R):-J is I+1,d(T,J,[I|S],M,R).
d([_|T],I,S,M,R):-J is I+1,d(T,J,S,M,R).
d(_,_,_,R,R).
m(X):-atom_chars(X,A),d(A,0,[],[']'],[_|R]),atomic_list_concat(['['|R],S),print(S).

উদাহরণ:

?- m('!^45sdfd[hello world[[djfut]%%357]sr[jf]s][srtdg][]').
'[(49,50),(42,48),(8,41),(36,39),(20,33),(21,27)]'
true 

1

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

f(char*Z){for(char*z=Z,*q=z;*z;*z++-93||printf("%d,%d;",*--q,z-1-Z))*z-91||(*q++=z-Z);}

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

ব্যাখ্যা

বন্ধুর স্ট্রিং সূচকগুলি খোলার ট্র্যাক রাখতে, ইনপুট স্ট্রিংটি ওভাররাইট করা হয় এবং স্ট্যাক হিসাবে ব্যবহৃত হয়।

f(char*Z){          // take mutable input string
 for(char*z=Z,*q=z; // copy pointer to current string index, current stack index
 *z;                // loop through the entire string
 *z++-93||          // if z == ']'
   printf("%d,%d;", // decrement stack pointer,
    *--q,z-1-Z))    //  write bracket pair position
  *z-91||           // if z == '['
   (*q++=z-Z);}     // write bracket position onto stack, increment stack pointer

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


1

জেলি , 20 বাইট

=©ⱮØ[_/aÄ$+®ŻĠḊẎ_2s2

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

এটি রেজিস্টারে একটি পার্শ্ব-প্রতিক্রিয়া রয়েছে, আশা করি এটি কোনও ফাংশন হওয়ার অনুমতি দেওয়া হয়েছে।


এটি পুনরায় ব্যবহারযোগ্য, তাই আমি মনে করি এটি ঠিক আছে। বিএফ উত্তরগুলি সাধারণত টেপটি ফাঁকা ছেড়ে দেয় না
dylnan

1

জাপট ভি 1.4.5, 23 বাইট

;Ë¥']?ApENo):D¥'[©NpE
A

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

আনপ্যাকড এবং কীভাবে এটি কাজ করে

;UmDE{D==']?ApENo):D=='[&&NpE
A

;                              Use alternative set of initial variables
                               A = [] is used here
 UmDE{                         Map over each char of input string...
      D==']?                     If the char is closing bracket...
            ApENo)                 Push the current index and N.pop() to A
                  :D=='[&&       Otherwise, if the char is opening bracket...
                          NpE      Push the current index to N

A     Output A

আউটপুট একটি সমতল অ্যারে [closing index, opening index]। যদি বিপরীত অর্ডারটি পছন্দসই না wহয়, শেষে যুক্তটি কাজটি করে (+1 বাইট)।


1

কমন লিস্প, 95 বাইট

(lambda(u &aux s)(dotimes(p(length u))(case(elt u p)(#\[(push p s))(#\](print`(,(pop s),p))))))
দীর্ঘ সংস্করণ
(defun par (string &aux stack)
  (dotimes (pos (length string))
    (case (char string pos)
      (#\[ (push pos stack))
      (#\] (print (list (pop stack) pos))))))
টেস্ট
((lambda(u &aux s)(dotimes(p(length u))(case(elt u p)(#\[(push p s))(#\](print`(,(pop s),p))))))
 "!^45sdfd[hello world[[djfut]%%357]sr[jf]s][srtdg][] ")

কপি করে প্রিন্ট:

(21 27) 
(20 33) 
(36 39) 
(8 41) 
(42 48) 
(49 50)

1

কে (এনএনজি / কে) , 38 37 বাইট

{b@0N 2#,/=(|':+\-/a)b:&|/a:"[]"=\:x}

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

{ } যুক্তি দিয়ে ফাংশন x

"[]"=\:xঘটনার জন্য দুটি বুলিয়ান তালিকা "["এবং"]"

a: ধার্য a

|/ দুটি তালিকার বুলিয়ান "বা"

& কোথায় (কোন সূচকগুলিতে) বন্ধনীগুলি?

b: ধার্য b

-/1 সাথে একটি তালিকা "[", -1 জন্য"]" , এবং সর্বত্র অন্য 0

+\ আংশিক পরিমাণ

|': জোড়াযুক্ত ম্যাক্সিমা (প্রতিটি উপাদান পূর্ববর্তীটির সাথে সর্বাধিক আকার ধারণ করে, প্রাথমিক উপাদানটি একই থাকে)

এটি প্রতিটি চরিত্রের জন্য বন্ধনী গভীরতার প্রতিনিধিত্ব করে। আমরা এর সাথে সূচী করিb সূচীকরণ (জুস্টপজিশনটি ইনডেক্সিং হয়) এবং কেবল বন্ধনীগুলির জন্য বন্ধনী গভীরতা পাই।

= "গোষ্ঠী অনুসারে" - অভিধানগুলি ম্যাপিং করে যে সূচকগুলিতে সেগুলি ঘটে to

,/ কীগুলিকে উপেক্ষা করে অভিধানে মানগুলি যুক্ত করে তুলুন

0N 2# ২-কলামের ম্যাট্রিক্সের পুনরায় আকার দিন (তালিকার তালিকা)

b@bম্যাট্রিক্সের প্রতিটি উপাদান সহ সূচক


1

জেলি , 20 18 বাইট

@ ইউজার 202729 যা আমাকে তা জানিয়ে ধন্যবাদ জানিয়ে 1 টি বাইট সংরক্ষণ µ€করা হয়েছে)

ẹⱮØ[µ³ḣċþØ[_/Ụị)Z’

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

এটির সাথে কাজ করার জন্য কয়েক ঘন্টা ধরে কুস্তি করার পরে ... আমি সত্যই অবাক হয়েছি যে এটি খুব কম পেয়েছে :-)

ব্যাখ্যা

ẹⱮØ[µ³ḣċþØ[_/Ụị)Z’   Main link. Argument: s (string)  '[a[b]c[]][d]'
  Ø[                 Shortcut for the string "[]".
 Ɱ                   For each char in the "[]":
ẹ                      Find the indices of each occurrence in the input.
                     For our example, this gives the array [[1, 3, 7, 10], [5, 8, 9, 12]].

    µ                Begin a new monadic chain, with said array as its argument.
               )     For each of the two sub-arrays q within the array:
                         [[1, 3, 7, 10], [5, 8, 9, 12]]
     ³ḣ                For each item n in q, take the first n chars of the input.
                         [['[',     '[a[',      '[a[b]c[',   '[a[b]c[]]['],
                          ['[a[b]', '[a[b]c[]', '[a[b]c[]]', '[a[b]c[]][d]']]
        þØ[            For each string s in this, and each char c in "[]":
       ċ                 Count the occurrences of c in s.
                         [[[1, 0],  [2, 0],     [3, 1],      [4, 3]],
                          [[2, 1],  [3, 2],     [3, 3],      [4, 4]]]
           _/          Reduce each pair by subtraction. This is the number of open brackets
                         at each position.
                         [[1, 2, 2, 1], [1, 1, 0, 0]]
             U         Sort the indices by their values, using position as a tiebreaker.
                         [[1, 4, 2, 3], [3, 4, 1, 2]]
              ị        Index these values back into q.
                         [[1, 10, 3, 7], [9, 12, 5, 8]]

               )     Start a new monadic chain with the result as its argument.
                Z    Zip; transpose rows and columns.
                         [[1, 9], [10, 12], [3, 5], [7, 8]]
                 ’   Decrement; switch to 0-indexing.
                         [[0, 8], [9, 11], [2, 4], [6, 7]]

1

সিজেম , 25 বাইট

0q{"[]"#"_ \p_p "S/=~)}/;

আশ্চর্যজনকভাবে প্রতিযোগিতামূলক - কেবল জাপট এবং জেলির কাছে হেরে [ সম্পাদনা করুন] : এবং কাঠকয়লা এবং স্ট্যাক্স :(]

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

ব্যাখ্যা

0                          Push 0.
 q                         Push the input.
  {                   }/   For each character in the input:
   "[]"#                     Find index of this character in the string "[]" (or -1 if not found).
                   =         Use this index to choose
        "       "S/            one of the following snippets
                    ~          and execute it:
         _                       If it was 0 ('['), duplicate the number on the stack.
           \p_p                  If it was 1 (']'), print the current number and the one under it.
                                 If it was -1, do nothing.
                     )       Increment the number on top of the stack.
                        ;  Delete the number.


0

পাইথ ,  28  26 বাইট

{I#.e,t+lhfSI/LT`Y+._>Qk\]

পরীক্ষা স্যুট.

এই মুহুর্তে এটি মোনমনিকের পদ্ধতির চেয়ে দীর্ঘ , তবে আমার মনে হচ্ছে আমি এটিকে কিছুটা গল্ফ করতে পারি এবং এটি ভাগ্যক্রমে পাইথোনিকাল-আবশ্যক কাঠামোও ব্যবহার করে না V। প্রাথমিক সংস্করণটি ছিল 36 বাইট এবং এতে অনেকগুলি বাগ রয়েছে।

কিভাবে এটা কাজ করে

{I # .e, t + lhfSI / LT`Y + ._> Qk \] - সম্পূর্ণ প্রোগ্রাম। STDIN থেকে একটি উদ্ধৃত স্ট্রিং Q নেয়।
   .e - গণিত মানচিত্র। k = পুনরাবৃত্তি সূচক, খ = বর্তমান উপাদান।
                     > কিউ - কে এর চেয়ে বড় সূচকগুলিতে কি এর উপাদানগুলি পান।
                   ._ - এর সমস্ত উপসর্গ তৈরি করে।
                  + \] - এবং একটি "]" যুক্ত করুন (কিছু প্রান্ত-কেস পরিচালনা করার জন্য)।
          f - টি = বর্তমান উপাদান সহ এই তালিকায় ফিল্টার করুন।
              এল `ওয়াই - স্ট্রের প্রতিটি চরিত্রের জন্য ([])," [] "...
             / টি - ... টিতে এর উপস্থিতিগুলি গণনা করুন।
           এসআই - এবং মানগুলি ক্রমবর্ধমান বাছাই করা হচ্ছে কিনা তা পরীক্ষা করুন।
         h - মাথা। প্রথম উপাদানটি পুনরুদ্ধার করুন।
       + l - এই + কে এর দৈর্ঘ্য পান।
      t - হ্রাস (1 দ্বারা)।
     , - এবং কে এর সাথে এই মানটি যুক্ত করুন। [আমি, কে] আমি যেখানে রয়েছি ফিরে আসে
                             সম্পর্কিত সূচী] এবং কে হল [।
  # - এই তালিকাটি ফিল্টার করুন:
{আমি - জুটিটি অনুলিপি করার চেয়ে অবিচ্ছিন্ন।

{I#.e,t+lhfSI/LT`Y._>Q অ্যালমোস্ট 22 টি বাইটের জন্য কাজ করে ...
মিঃ এক্সকডার

0

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

say"$-[0] ".($+[0]-1)while s/\[[^][]*\]/1x length$&/e

হিসাবে চালান perl -nE '<above code snippet>'। স্টিডিনের মাধ্যমে ইনপুট নেয়।

যথারীতি, সমস্যার সর্বোত্তম পার্ল সমাধান নিয়মিত প্রকাশ। আমরা কোনও জোড় বন্ধনীর সাথে মেলানোর চেষ্টা করি যা এর পরিবর্তে নির্বোধ চেহারার অক্ষর শ্রেণি ( s/\[[^][]*\]/.../) ব্যবহার করে এর মধ্যে কোনও জোড়া থাকে না । যদি ম্যাচটি সফল হয়, আমরা অঙ্কের সাথে মিলে যাওয়া পাঠ্যটি প্রতিস্থাপন করব1 বারবার যাতে আমরা ঘটনাক্রমে আবার সেই বন্ধনীগুলির সাথে আর মেলে না, এবং আমরা ম্যাচের সূচকগুলি প্রিন্ট আউট করি। পাখলান পুনরাবৃত্তি.


0

স্ট্যাক্স , 13 বাইট

é√p(l▓1½\á²ë(

এটি চালান এবং এটি ডিবাগ করুন

এটি খোলা ব্রেস জোড়া ট্র্যাক করতে ইনপুট স্ট্যাক ব্যবহার করে। এখানে প্রোগ্রামটি প্যাকেজবিহীন, অবরুদ্ধ এবং মন্তব্য করা হয়েছে।

F       iterate over input characters
 .][I   get the index of the character in the string "[]", or -1
 ^|cv   skip the rest of this iteration if index was -1
 i~     push the current iteration index to the input stack
 C      skip the rest of this iteration if index was 0
 \      form a pair with the top two items from the input stack
 JP     join with space, and print

এটি চালান


0

কাঠকয়লা , 20 বাইট

FLθ≡§θι[⊞υι]«I⊟υ,Iι⸿

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

FLθ

ইনপুট স্ট্রিংয়ের দৈর্ঘ্যের অন্তর্নিহিত ব্যাপ্তির উপর লুপ।

≡§θι

বর্তমান চরিত্রটি স্যুইচ করুন।

[⊞υι

যদি এটি হয় [তবে বর্তমান সূচকটিকে পূর্বনির্ধারিত অ্যারে ভেরিয়েবলের দিকে ধাক্কা দিন।

]«I⊟υ,Iι⸿

যদি এটি ]হয় তবে অ্যারে ভেরিয়েবল থেকে সর্বশেষতম সূচকটি পপ করুন এবং এটি মুদ্রণ করুন এবং বর্তমান সূচকটি কমা দ্বারা পৃথক করে একটি নতুন লাইন শুরু করুন। বিকল্প আউটপুট ফর্ম্যাটগুলি, গ্রহণযোগ্য হলে, কিছু বাইট সংরক্ষণ করতে পারে: ]I⟦⊟υιω2 বাইট সংরক্ষণ করে তবে প্রতিটি সূচককে পৃথক লাইনে প্রিন্ট করে, সূচকগুলির জোড়গুলিকে দ্বিগুণ-ফাঁক করে; ]I⟦⊟υιকেবল সূচকগুলি পৃথক রেখায় মুদ্রণ করে, তাদের পার্থক্য করা শক্ত করে তোলে।

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