বন্ধনী সম্প্রসারণ!


36

আপনার চ্যালেঞ্জটি হ'ল দেখানো হয়েছে এমন কোনও প্রোগ্রামের ইনপুটটিতে কিছু বন্ধনী প্রসারিত করা:

  1. দুটি বন্ধনী বন্ধনী এবং একটি বন্ধনী বন্ধনী পরে একটি একক অঙ্ক এন এর মধ্যে একটি স্ট্রিং গুলি সন্ধান করুন[]
  2. বন্ধনী অপসারণ।
  3. প্রতিস্থাপন গুলি নিজেই সঙ্গে পুনরাবৃত্তি এন বার। (যদি এন 0 হয়, কেবল এস সরান ))
  4. ইনপুটটিতে আর কোনও ম্যাচিং বন্ধনী উপস্থিত না হওয়া পর্যন্ত পদক্ষেপ 1 এ যান।

অতিরিক্ত নিয়ম এবং স্পষ্টতা:

  • আপনি কোনও অনুমোদিত উপায়ের মাধ্যমে ইনপুট নেবেন এবং আউটপুট দেবেন।
  • আউটপুটটিতে একটি ট্রেলিং নিউলাইন অনুমোদিত।
  • আপনাকে কেবল ইনপুটটিতে মুদ্রণযোগ্য ASCII পরিচালনা করতে হবে।
  • আপনি অনুমান হতে পারে যে সব বন্ধনী মেলে, IE আপনি ইনপুট গ্রহণ করবে না []]]]বা [[[[]
  • আপনি ধরে নিতে পারেন যে প্রতিটি বন্ধনী বন্ধনীটির ]পরে একটি অঙ্ক রয়েছে।

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

Input                -> Output
[Foo[Bar]3]2         -> FooBarBarBarFooBarBarBar
[one]1[two]2[three]3 -> onetwotwothreethreethree
[three[two[one]1]2]3 -> threetwoonetwoonethreetwoonetwoonethreetwoonetwoone
[!@#[$%^[&*(]2]2]2   -> !@#$%^&*(&*($%^&*(&*(!@#$%^&*(&*($%^&*(&*(
[[foo bar baz]1]1    -> foo bar baz
[only once]12        -> only once2
[only twice]23456789 -> only twiceonly twice3456789
[remove me!]0        -> 
before [in ]2after   -> before in in after

এটি , প্রতিটি ভাষার সংক্ষিপ্ত উত্তর জিততে পারে। শুভকামনা!



13
আপনার স্ট্রিংটির সংক্ষিপ্ত বিন্যাসে ফিরে সংক্ষেপে আরও একটি চ্যালেঞ্জ পোস্ট করা উচিত
জো কিং

আপনার স্ট্রিংয়ে sঅন্য ব্র্যাকেট কখনই ধারণ করা উচিত নয় তা স্পষ্ট করে বলার অপেক্ষা রাখে না? উদাহরণস্বরূপ, 3 বার [Foo[Bar]3]2স্ট্রিংটি প্রসারিত করে সমাধানের চেষ্টা করার Foo[Barফলে একটি অবৈধ অবস্থার সৃষ্টি হবেFoo[BarFoo[BarFoo[Bar]2
BradC

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

তার মানে কি এর দুটি বৈধ উত্তর আছে [a[b]2c[d]2e]2? আপনি abbcddeabbcddeপ্রসারিত bএবং dপ্রথম দ্বারা পেতে , কিন্তু ababcdbcdedbabcdbcdedeপ্রসারিত a[bএবং d]2eপ্রথম দ্বারা।
ব্র্যাডিসি

উত্তর:


13

গেম , 17 টি অক্ষর

[#]?=@repeat{?;#}

নমুনা রান:

bash-4.4$ gema '[#]?=@repeat{?;#}' <<< '[three[two[one]1]2]3'
threetwoonetwoonethreetwoonetwoonethreetwoonetwoone

বাহ, কাজের জন্য সঠিক ভাষা সন্ধানের বিষয়ে কথা বলুন!
MDXF

বা ভাষার জন্য সঠিক কাজ। অনেক চ্যালেঞ্জ এড়াতে হয়েছিল কারণ পুনরাবৃত্তি যুক্তি যথেষ্ট নমনীয় ছিল না।
manatwork

এই মুহুর্তে এটি গ্রহণ করার কারণে এটি কোনওভাবেই পরাজিত হচ্ছে তা আমি দেখতে পাচ্ছি না তবে এটির সম্ভাব্য ক্ষেত্রে এটি অগ্রহণযোগ্য হবে।
এমডি এক্সএফ

8

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

+`\[([^][]*)](.)
$2*$1

এটি অনলাইন চেষ্টা করুন! এটি কার্যতঃ রেটিনা ১ এ একটি বিল্টিন Edit সম্পাদনা: @ কোবিতে 1 বাইট সংরক্ষণ করা হয়েছে রেটিনা 0.8.2 এ 47 বাইট:

].
]$&$*¶
{+`\[([^][]*)]¶
$1[$1]
\[([^][]*)]

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


7

হাস্কেল , 101 96 বাইট

fst.(""%)
infix 4%
s%']':d:r=(['1'..d]>>s,r)
s%'[':r|(t,q)<-""%r=s++t%q
s%x:r=s++[x]%r
s%e=(s,e)

এটি অনলাইন চেষ্টা করুন! অন্যান্য উত্তরের মতো নিয়মিত প্রকাশের পরিবর্তে এটি পুনরাবৃত্ত পার্সার প্রয়োগ করে।

-5 বাইট ধন্যবাদ বিএমওকে !


4
একটি স্থিরতা ঘোষণা (%)আপনাকে 1 বাইট ['1'..d]বাঁচায় এবং আরও 4 টি বাঁচায়, দেখুন এটি
12

3
@ বিএমও নিস, আমি আশা করিনি যে কোনও স্থির ঘোষণা কোড গল্ফিংয়ের জন্য কার্যকর হবে। আমি মনে করি আপনার টিপস প্রশ্নটিতে এটি যুক্ত করা উচিত।
লাইকনি

7

পার্ল 5 , 34 33 29 + 1 ( -p) = 30 বাইট

s/.([^[]*?)](.)/$1x$2/e&&redo

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

@ শেগি এবং @ টনহসপেল থেকে কিছু সহায়তায় এটি কেটে ফেলুন।


3
আমি মুক্তো জানি না তবে আবারও সুন্দর লাগছে!
অফিসিয়ালাইম

আমি মনে করি আপনি এড়িয়ে চলতে না পেরে একটি বাইট সংরক্ষণ করতে সক্ষম হবেন ]
শেগি

1
আমি পার্লকে চিনি না তবে এটি 30 + 1 বাইটের জন্য কাজ করে বলে মনে হচ্ছে
শেগি

2
এই 29 + 1 এছাড়াও কাজ করে: perl -pe 's/.([^[]*?)](.)/$1x$2/e&&redo'এবংperl -pe 's/.([^][]*)](.)/$1x$2/e&&redo'
টন হসপেল

5

জাপট ভি 2 , 21 20 19 বাইট

@ শেগি কে 2 বাইট সংরক্ষণ করা হয়েছে

e/.([^[]*?)](./@YpZ

এটি অনলাইন পরীক্ষা!

eপুনরাবৃত্তি প্রতিস্থাপন, যা আর কোনও ম্যাচ না হওয়া পর্যন্ত একসাথে এক প্রতিস্থাপন করে। এই ক্ষেত্রে, রেগেক্সের ম্যাচগুলি /\[([^[]*?)](\d)/g<< অভ্যন্তরীণ পাঠ্য> পুনরাবৃত্তি < ডিজিটাল > বারের সাথে আর কোনও মিল না হওয়া পর্যন্ত প্রতিস্থাপন করা হবে।

আমি যা পরিকল্পনা করেছি ( এখানে ) অনুসারে, এই রেজেক্সটি কমপক্ষে কমপক্ষে 3 2 বাইট কম হওয়া উচিত :

‹[“⁽[»₋”]“.›

2
যেহেতু আমরা " ধরে নিতে পারি যে প্রতিটি বন্ধনী বন্ধনীর ]পরে তার একটি অঙ্ক রয়েছে " আপনার (\dসাথে প্রতিস্থাপন করতে সক্ষম হওয়া উচিত (.
শেগি

আপনি এর \[সাথে প্রতিস্থাপন করতে পারেন.
শেগি

@ শেগি নিস, ধন্যবাদ!
ETH প্রোডাকশনগুলি

4

জাভাস্ক্রিপ্ট, 71 67 66 বাইট

আমি ছিল একটি 54 বাইট সমাধান কিন্তু এটা দ্বিতীয় টেস্ট ক্ষেত্রে দ্বারা উপর মাতাল পেয়েছিলাম! :(

f=s=>s!=(x=s.replace(/.([^[]*?)](.)/,(_,y,z)=>y.repeat(z)))?f(x):x

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

f=s=>s!=(x=s.replace(/.([^[]*?)](.)/,(_,y,z)=>y.repeat(z)))?f(x):x
o.innerText=`[Foo[Bar]3]2
[one]1[two]2[three]3
[three[two[one]1]2]3
[!@#[$%^[&*(]2]2]2
[[foo bar baz]1]1
[only once]12
[only twice]23456789
[remove me!]0
before [in ]2after`.split`\n`.map(x=>x.padEnd(22)+`:  `+f(x)).join`\n`
<pre id=o></pre>


4

পাইথন 3 , 110 93 92 বাইট

import re
f=lambda s:f(re.sub(r'\[([^][]+)\](.)',lambda m:m[1]*int(m[2]),s))if'['in s else s

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

-17 বাইট পিজ্জা প্যান্টস 184 -1 বাইট ধন্যবাদ কেভিন ক্রুইজসেনকে ধন্যবাদ


1
পুনরায় ম্যাচ ইন্ডেক্সিং এবং সাবস্ট্রিং চেক ব্যবহার করে পাইথন 3 এ -17 বাইটin
pizzapants184

1
-1 বাইট এ পরিবর্তন (\d)করে (.), কারণ আমরা জানি যে একটি ব্লক-বন্ধনী ]সর্বদা একটি অঙ্ক পরে থাকে।
কেভিন ক্রুইজসেন 12

4

স্কালা , 173 বাইট

l.foreach{x=>def r(c:String):String={val t="""\[([^\[\]]*)\](.)""".r.unanchored;c match{case t(g,h)=>r(c.replaceAllLiterally(s"[$g]$h",g*h.toInt));case _=>c}};println(r(x))}

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

সম্প্রসারিত:

l.foreach { x =>
  def remove(current: String): String = {
    val test ="""\[([^\[\]]*)\](.)""".r.unanchored
    current match {
      case test(g, h) => remove(current.replaceAllLiterally(s"[$g]$h", g * h.toInt))
      case _ => current
    }
  }

  println(remove(x))
}

পুরানো সমাধান

স্কালা , 219 215 213 212 199 বাইট

l.foreach{x=>def r(c:String):String={"""\[([^\[\]]*)\](.)""".r.findFirstMatchIn(c).map{x=>val g=x.group(1);val h=x.group(2).toInt;r(c.replaceAllLiterally(s"[$g]$h",g*h))}.getOrElse(c)};println(r(x))}

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

সম্প্রসারিত:

l.foreach { x =>
  def remove(current: String): String = {
    """\[([^\[\]]*)\](.)""".r.findFirstMatchIn(current).map { x =>
      val g = x.group(1)
      val h = x.group(2).toInt
      remove(current.replaceAllLiterally(s"[$g]$h", g * h))
    }.getOrElse(current)
  }
  println(remove(x))
}

যেখানে l হ'ল স্ট্রিংগুলির তালিকা যা আমরা প্রক্রিয়া করব।

কেভিন ক্রুইজসেন -২ বাইটের জন্য ধন্যবাদ

অব্যবহৃত প্যারামিটারটি সরিয়ে 212 থেকে 199 অবধি মনোযোগ দিন নি pay


4
পিপিসিজিতে আপনাকে স্বাগতম! Tio.run/#scalaটিও'র স্কলা ইন্টারপ্রেটারটি ব্যবহার করে দেখুন এবং উত্তরটির জন্য আপনি কোনও লিঙ্ক জমা দিতে পারেন কিনা তা দেখুন, যাতে অন্যরা এটি অনলাইনে চেষ্টা করতে পারে। :)
অফিসিয়ালাইম

2
ধন্যবাদ! আমি লিঙ্কটি অন্তর্ভুক্ত করার জন্য উত্তরটি সম্পাদনা করেছি। আশা করা যায় যে এটি সঠিকভাবে জমা দেওয়ার জন্য শিরোনাম, কোড এবং পাদচরণ কীভাবে ঘোষণা করা হয়েছে তা ঠিক আছে।
শিক্কু

1
হাই, পিপিসিজিতে আপনাকে স্বাগতম! দুর্দান্ত প্রথম উত্তর, আমার কাছ থেকে +1। আমার মনে হয় আপনি পরিবর্তন করে 1 বাইট সংরক্ষণ করতে পারবেন (\d)করার (.), কারণ আমরা জানি একটি ব্লক-বন্ধনী ]সবসময় একটি অঙ্ক দ্বারা অনুসরণ করা হয়।
কেভিন ক্রুইজসেন 12

3

স্ট্যাকড , 39 38 বাইট

শেগিকে 1 বাইট ধন্যবাদ সংরক্ষণ করা হয়েছে, রেজেক্সকে গল্ফ করেছে!

['\[([^[\]]+)](.)'{.y x:x#~y*}recrepl]

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

কেবল পুনরাবৃত্তভাবে '\[([^[\]]+)](.)'পুনরাবৃত্তি নিয়মের সাথে একটি রেজেক্সকে প্রতিস্থাপন করে ।


আমি মনে করি আপনি শেষ থেকে বাঁচতে না পেরে একটি বাইট সংরক্ষণ করতে পারেন ]
শেগি

3

পাইথন 3, 155 148 101 97 বাইট

def f(x):
 a=x.rfind('[')
 if~a:b=x.find(']',a);x=f(x[:a]+x[a+1:b]*int(x[b+1])+x[b+2:])
 return x

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

হাইপারনিউটারিনো এবং মেগো -4 বাইটের জন্য এবং 202729 -4 বাইট ব্যবহারকারীর জন্য ধন্যবাদ।


একটি দম্পতি বাইট সংরক্ষণ করার জন্য এটি একটি ওয়ান-লাইনার করুন:def f(x):a=x.rfind('[');b=x.find(']',a);return f(x[:a]+x[a+1:b]*int(x[b+1])+x[b+2:])if~a else x
ম্যাথমন্ডন

3

জাভাস্ক্রিপ্ট - 77 75 72 বাইট

f=a=>a.replace(/(.*)\[([^[]*?)](.)(.*)/,(a,b,c,d,e)=>f(b+c.repeat(d)+e))

সম্পাদনা করুন: শেগির সুপারিশ সহ আপডেট করা রেজেক্স

স্নিপেট:


2
পিপিসিজিতে আপনাকে স্বাগতম! আপনার রেজিএক্স টুইট করে আপনি এটি 70 বাইটে নামতে পারেন।
শেগি

হ্যাঁ, স্পষ্টতই, দুঃখিত, 72 বাইট আমি গুনতে ভুলে যাচ্ছিলাম f=!
শেগি

2

আর্গুমেন্ট, 30 28 বাইট সহ কোয়াডআর

\[[^[]+?].
∊(⍎⊃⌽⍵M)⍴⊂1↓¯2↓⍵M

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

\[[^[]+?]. এর সাথে " [নন- [স্টফ ]অক্ষর" প্রতিস্থাপন করুন

¯2↓⍵M এর শেষ দুটি অক্ষর ফেলে দিন এম atch ( " ]অঙ্ক")
1↓ প্রথম অক্ষর ড্রপ ( " [")
 ঘিরা সামগ্রিকভাবে চিকিত্সা করা
(... )⍴ দৈর্ঘ্যের eshape:
⌽⍵M বিপরীত এম atch
 প্রথম (অঙ্ক) বাছাই
 মূল্যায়ন
ε nlist ( চেপ্টা)

 আর কোনও পরিবর্তন না হওয়া পর্যন্ত পুনরাবৃত্তি করুন


সমতুল্য ডায়ালগ এপিএল ফাংশনটি 47 বাইট:

'\[[^[]+?].'R{∊(⍎⊃⌽⍵.Match)⍴⊂1↓¯2↓⍵.Match}⍣≡

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


2

জাভা 8, 250 249 241 239 বাইট

s->{for(;s.contains("[");)for(int i=0,j,k;i<s.length();)if(s.charAt(i++)==93){String t="",r=t;for(j=k=s.charAt(i)-48;j-->0;)t+=s.replaceAll(r="(.*)\\[([^\\]]+)\\]"+k+"(.*)","$2");s=k<1?t:s.replaceFirst(r,"$1$3").replace("",t);}return s;}

-2 বাইটস @ জোনাথনফ্রেচকে ধন্যবাদ জানায় ( এখন দুটি অপ্রিন্টযোগ্য এএসসিআইআই অক্ষর রয়েছে, যা নীচের টিআইও-লিঙ্কে দেখা যাবে)।

দীর্ঘশ্বাস ত্যাগ করুন ... রেগেক্সের সাথে জাভা এতটাই সীমাবদ্ধ I'll আমি এখানে অন্য উত্তর থেকে নিজেকে উদ্ধৃত করব:

জাভাতে এর WWWWসাথে প্রতিস্থাপন 222Wকরা সহজ, তবে এর সাথে 4Wনয় .. জাভা যদি কোনও কিছুর জন্য রেজেক্স ক্যাপচার-গ্রুপ ব্যবহার করার উপায় পেতেন .. সাথে দৈর্ঘ্য পেলেন"$1".length() , নিজেকে ম্যাচটি প্রতিস্থাপন করে, ম্যাচটিকে "$1".replace(...)একটি পূর্ণসংখ্যায় রূপান্তর করা new Integer("$1")বা ব্যবহার করে রেটিনা (যেমন s.replaceAll("(?=(.)\\1)(\\1)+","$#2$1"))জাভাস্ক্রিপ্ট (যেমন s.replaceAll("(.)\\1+",m->m.length()+m.charAt(0))) এর মতো কিছু হ'ল আমার কোড 1 যা ভবিষ্যতে জাভাতে কোডগল্ফিংয়ের সুবিধার্থে দেখতে চাইবে>>>> আমি মনে করি এটি জাভা ঘৃণা করতে পারে এমন 10 তম বার! ক্যাপচার-গ্রুপ ম্যাচের সাথে কিছু ..
এখান থেকে উদ্ধৃতি।

ব্যাখ্যা:

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

s->{                           // Method with String as both parameter and return-type
  for(;s.contains("[");)       //  Loop as long as the String contains a block-bracket
    for(int i=0,j,k;i<s.length();)
                               //   Inner loop over the characters of the String
      if(s.charAt(i++)==93){   //    If the current character is a closing block-bracket:
        String t="",r=t;       //     Create two temp-Strings, starting empty
        for(j=k=s.charAt(i)-48;//     Take the digit after the closing bracket
            j-->0;)            //     Loop that many times:
          t+=s.replaceAll(r="(.*)\\[([^\\]]+)\\]"+k+"(.*)","$2");
                               //      Append `t` with the word inside the block brackets
        s=k<1?                 //     If the digit was 0:
           t                   //      Replace the input with an empty String as well
          :                    //     Else:
           s.replaceFirst(r,"$1$3").replace("",t);}
                               //      Replace the word between brackets by `t`,
                               //      and remove the digit
  return s;}                   //  Return the modified input-String as result

1
আমি মনে করি আপনি দুটি বাইট সংরক্ষণ করতে অপরিচ্ছন্ন অক্ষর হলেও সত্যই ASCII ব্যবহার করতে পারেন । (আপনার সমাধানটি সত্যই 241 বাইট, 239 টি অক্ষর লাগে))
জোনাথন ফ্রেচ

@ জোনাথানফ্রেচ ধন্যবাদ! মুদ্রণযোগ্য ASCII ব্যাপ্তির বাইরে 1 বাইট চরিত্রের সন্ধান করছিল। একটি
অচিহ্নিতযোগ্য


2

সি, 407 368 বাইট

বাইটস সংরক্ষণের জন্য জনাথন ফ্রেঞ্চকে ধন্যবাদ।

গল্ফড (ফাইল বন্ধনী):

i,j,k,l,n;char*f(a,m)char*a;{for(i=0;a[i];++i){a[i]==91&&(j=i+1);if(a[i]==93){k=a[i+1]-48;if(!k){for(l=i+2;l<m;)a[++l-i+j-4]=a[l];a=realloc(a,m-3);return f(a,m-3);}for(l=j;l<i;)a[~-l++]=a[l];for(l=i+2;l<m;)a[++l-4]=a[l];m-=3;n=m+~-k*(i---j--);a=realloc(a,n);for(l=i;l<m;)a[l+++~-k*(i-j)]=a[l];for(m=0;m<k;++m)for(l=j;l<i;)a[l+++m*(i-j)]=a[l];return f(a,n);}}return a;}

কর্মসূচীর সাথে নিরবচ্ছিন্ন:

#include <stdlib.h>
#include <stdio.h>

// '[' = 133
// ']' = 135
// '0' = 48

i, j, k, l, n;

char* f(a,m) char*a;
{
  for (i=0; a[i]; ++i) {
    a[i]==91&&(j=i+1);

    if (a[i]==93) {
      k=a[i+1]-48;

      if (!k) {
        for (l=i+2; l<m; )
          a[++l-i+j-4] = a[l];

        a = realloc(a,m-3);
        return f(a,m-3);
      }
      for (l=j;l<i;)
        a[~-l++] = a[l];
      for (l=i+2; l<m; )
        a[++l-4] = a[l];
      m -= 3;
      n = m+~-k*(i---j--);
      a = realloc(a,n);

      for (l=i; l<m; )
        a[l+++~-k*(i-j)] = a[l];
      for (m=0; m<k; ++m)
        for (l=j; l<i;)
          a[l+++m*(i-j)] = a[l];

      return f(a,n);
    }
  }
  return a;
}

int main()
{
  char c[]="[Foo[Bar]3]2";
  char *b;

  char cc[]="[remove me!]0";
  char *bb;

  char ccc[]="[only once]12";
  char *bbb;

  b=malloc(13);
  bb=malloc(14);
  bbb=malloc(14);

  for (i=0; i<13; ++i)
    b[i] = c[i];

  for (i=0; i<14; ++i)
    bb[i] = cc[i];

  for (i=0; i<14; ++i)
    bbb[i]=ccc[i];

  printf("%s\n", f(b, 13));
  printf("%s\n", f(bb, 14));
  printf("%s\n", f(bbb, 14));

  return 0;
}

জিসিসি 5.4.1 এর সাথে সংকলিত, gcc bracket.c



প্রয়োজনীয় 387 টি অন্তর্ভুক্ত রয়েছে (রিলোকের জন্য)। আমি পরে একটি পরিষ্কার আপডেট করব (অদৃশ্য সংস্করণ সহ)। ধন্যবাদ
স্যাথোগগুয়া

আপনি জিসিসি ব্যবহার করেন, তাহলে আমি মনে করি কম্পাইলার উভয়ের সংজ্ঞা অনুমান করার চেষ্টা করবে mallocএবং reallocসহ, stdlib.hনিজস্ব দ্বারা।
জনাথন ফ্রেচ

আমি এটা জানতাম না। কোড গল্ফ করার জন্য দুর্দান্ত বৈশিষ্ট্য। ধন্যবাদ।
Tsathoggua

2

লাল , 147 বাইট

f: func[t][a: charset[not"[]"]while[parse t[any a some[remove["["copy h any a"]"copy d a](insert/dup v: copy""h to-integer d)insert v | skip]]][]t]

Ungolfed:

f: func [t][
    a: charset [not "[]"]                          ; all chars except [ and ]
    while [ parse t [                              ; repeat while parse is returning true
        any a                                      ; 0 or more chars other than [ and ]
        some [                                     ; one or more block:
            remove ["[" copy h any a "]" copy d a] ; remove the entire block, store the
                                                   ; substring between the [] in h,
                                                   ; the digit into d
            (insert/dup v: copy "" h to-integer d) ; makes d copies of h 
            insert v                               ; and inserts them in place 
            | skip ]                               ; skip if no match
        ]                                       
    ][]                                            ; empty block for 'while'
    t                                              ; return the modified string
]

আমি গতকাল কেবল রেডের পার্স উপভাষা শিখতে শুরু করেছি, তাই আমি নিশ্চিত যে আমার কোডটি আরও উন্নত করা যায়। পার্স রিজেেক্সের তুলনায় অতুলনীয় ভার্জোজ, তবে এটি খুব স্পষ্ট, নমনীয় এবং পঠনযোগ্য এবং বাকী লাল ভাষার সাথে অবাধে মিশ্রিত করা যায়।

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


1

জেলি , 30 বাইট

œṡ”]µḢUœṡ”[ẋ€1¦Ṫ©Ḣ$FṚ;®
Çċ”]$¡

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


ব্যাখ্যা।


œṡ”]µḢUœṡ”[ẋ€1¦Ṫ©Ḣ$FṚ;®    Helper link 1, expand once.
                           Assume input = "ab[cd]2ef".

œṡ      Split at first occurence of
  ”]      character "]".
    µ   Start new monadic chain. Value = "ab[cd","2ef".

Ḣ       ead. "ab[cd"
 U      Upend. "dc[ba"
  œṡ”[  Split at first occurence of "[". | "dc","ba".

ẋ€        Repeat ...
  1¦        the element at index 1...
          by ...
    Ṫ Ḣ$    the ead of the ail of ...
          the input list ("ab[cd","2ef") (that is, 2)

          The command  also pop the head '2'. The remaining
            part of the tail is "ef".
     ©    Meanwhile, store the tail ("ef") to the register.

          Current value: "dcdc","ba"
FṚ        Flatten and everse. | "abcdcd"
  ;®      Concatenate with the value of the register. "abcdcdef"

Çċ”]$¡    Main link.

 ċ”]$     Count number of "]" in the input.
     ¡    Repeatedly apply...
Ç           the last link...
            that many times.

1

সি, 381 বাইট

কমপ্যাক্ট সংস্করণ:

while(1){int t=strlen(i);int a,c=-1;char*w;char*s;char*f;while(c++<t){if(i[c]==']'){int k=c-a;w=calloc((k--),1);memcpy(w,&i[a+1],k);s=calloc((t-c-1),1);memcpy(s,&i[c+2],t-c-2);i[a]=0;int r=i[c+1]-48;if(r==0){f=calloc(t,1);sprintf(f,"%s%s",i,s);}else{f=calloc((t+k),1);sprintf(f,"%s%s[%s]%d%s",i,w,w,r-1,s);}free(i);i=f;break;}else if(i[c]=='[')a=c;}free(w);free(s);if(c>=t)break;}

পূর্ণ সংস্করণ:

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

void proceed(char* input)
{
  while(1)
  {
    int t=strlen(input);
    int start,cursor=-1;
    char* word;
    char* suffix;
    char* final;
    while(cursor++<t)
    {
      if(input[cursor]==']')
      {
        int wordlength = cursor-start;
        word=calloc((wordlength--),sizeof(char));
        memcpy(word, &input[start+1], wordlength );
        suffix=calloc((t-cursor-1),sizeof(char));
        memcpy( suffix, &input[cursor+2], t-cursor-2 );
        input[start]='\0';
        int rep=input[cursor+1]-'0';
        if(rep==0)
        {
          final=calloc(t,sizeof(char));
          sprintf(final,"%s%s",input,suffix);
        }
        else
        {
          final=calloc((t+wordlength+5),sizeof(char));
          sprintf(final,"%s%s[%s]%d%s",input,word,word,rep-1,suffix);
        }
        free(input);
        input=final;
        break;
      }
      else if(input[cursor]=='[')
        start=cursor;
    }
    free(word);
    free(suffix);

    if(cursor>=t)break;
  }
}

int main()
{
  char* input=calloc(256,sizeof(char));
  sprintf(input,"a[[toto]2b]2[ana]3");
  printf("in : %s\n",input);
  proceed(input);
  printf("out: %s\n",input);
  return 0;
}

3
পিপিসিজিতে আপনাকে স্বাগতম!
শেগি

1
সাইটে স্বাগতম! নোট করুন যে সি জমা দেওয়ার জন্য কেবল স্নিপেট নয়, পুরো প্রোগ্রাম বা ফাংশন হওয়া দরকার।
এমডি এক্সএফ

1

পাইথন, 80 বাইট

import re
b=re.sub
s=lambda x:eval(b(r"\](.)",r"')*\1+'",b(r"\[","'+('","%r"%x)))

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

s("[Foo[Bar]3]2") পরিবর্তিত [Foo[Bar]3]2 করে ''+('Foo'+('Bar')*3+'')*2+''এবং মূল্যায়ন করে।

বন্ধনীগুলিতে উদ্ধৃতি সহ ইনপুট ব্যর্থ (যেমন [']3)


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