প্রদত্ত বন্ধনী ব্যবহার করে একটি স্ট্রিং যুক্ত করুন


16

প্রোগ্রামটিতে নিম্নলিখিত ইনপুট দেওয়া হয়েছে:

  1. ব্লক শুরুর অক্ষরের তালিকা
  2. ব্লক শেষ অক্ষরের তালিকা
  3. বিন্যাসের জন্য একটি স্ট্রিং

দুটি অক্ষর সেট ইন্ডেন্টড দিয়ে সীমিত ব্লকগুলির সাথে স্ট্রিংটি ফর্ম্যাট করুন।

বিন্যাসটি প্রতি স্তরে দুটি স্পেস দিয়ে সম্পন্ন করা হয় এবং নীচের উদাহরণে যেমন দেখানো হয়েছে তেমন বন্ধনী স্থাপন করা হয়। আপনি খোলার এবং সমাপ্ত অক্ষরগুলির সেটটিকে বিযুক্ত করার জন্য ধরে নিতে পারেন।

জন্য যেমন {[(<এবং }])>খোলার এবং অক্ষর সেট বন্ধ এবং নিম্নলিখিত পংক্তি হিসাবে:

abc{xyz{text[note{comment(t{ex}t)abc}]}}

নিম্নলিখিত আউটপুট আশা করা হবে:

abc
{
  xyz
  {
    text
    [
      note
      {
        comment
        (
          t
          {
            ex
          }
          t
        )
        abc
      }
    ]
  }
}

আপনি "বন্ধনী" অক্ষরগুলির তালিকাটি হার্ড-কোড নাও করতে পারেন। কীভাবে ইনপুট দেওয়া হবে তা নির্দিষ্ট করা হয়নি; এটি আপনার কমান্ড-লাইন আর্গুমেন্ট বা স্ট্যান্ডার্ড ইনপুটের মাধ্যমে হতে পারে wish


5
আমরা কি ধরে নিতে পারি যে প্রতিটি বন্ধনীগুলির জন্য একটি বন্ধ রয়েছে এবং একই ক্রমে?
হুয়ান

প্রোগ্রামটি আর্গুমেন্ট হিসাবে দেওয়া কোনও প্রথম বন্ধনী অক্ষর সমর্থন করতে হবে? উদাহরণস্বরূপ ./program 'p' 'q' <<< '1p23p45q67q8' বা এটির জন্য কেবল সমর্থন প্রয়োজন {[(<এবং }])>?
জোয়ে অ্যাডামস

@ জোয়ি, আমি ধরে নেব না, যদিও এটি আরও চিত্তাকর্ষক হবে।
নিল

জোয়ি: ইনপুটটি হ'ল খোলা প্রথম বন্ধনী অক্ষর 2 বন্ধ বন্ধনীর অক্ষর 3. ইনডেন্টের স্ট্রিং। জুয়ান: আমরা ধরে নিতে পারি, যদিও কোডটির উপর নির্ভর করা দরকার নয়, আমার অর্থ হ'ল ডিলিম যদি বন্ধনী চরগুলি খোলার অংশ হয় তবে ইনডেন্ট বৃদ্ধি করুন, অন্যথায় বন্ধনীর বন্ধনীর অক্ষরগুলির অংশ যদি ইনডেন্ট হ্রাস পায়।
প্রশান্ত ভাতে

1
@ প্রসন্ত ভাতে: আর আউটপুটে?
লোজ্যাকার

উত্তর:


6

রুবি, 106 101 96 95

s,e,i=$*
i.scan(/[#{z=Regexp.quote s+e}]|[^#{z}]*/){|l|puts'  '*(s[l]?~-$.+=1:e[l]?$.-=1:$.)+l}

কমান্ড লাইনের মাধ্যমে ইনপুট সরবরাহ করা হয়।


1
~-j+=1পরিবর্তে ব্যবহার করে আপনি 4 টি অক্ষর সংরক্ষণ করতে পারেন(j+=1;j-1) । অতিরিক্তভাবে, $.পরিবর্তে সর্বত্র ব্যবহার করা jআপনাকে এটি মুছে ফেলতে দেয় j=0যা অন্য একটি চরিত্র সংরক্ষণ করে।
ভেন্টোরো

6

পার্ল - 131 96 94 অক্ষর

$i="";for$_(split/([\Q$ARGV[0]$ARGV[1]\E])/,$ARGV[2]){$i=~s/..// if/[\Q$ARGV[1]\E]/;print "$i$_\n"if$_;$i.='  'if/[\Q$ARGV[0]\E]/;}

মনে হয় সাধারণ অভিব্যক্তিগুলি মুছে ফেলার জন্য জায়গা থাকা উচিত, তবে এটি একটি দ্রুত পদক্ষেপ যা উদাহরণটিকে পরিচালনা করে, পাশাপাশি জোয়ে অ্যাডামসের যথেচ্ছ বন্ধনী সম্পর্কে অনুমানমূলকও।


উন্নতির জন্য প্রকৃতপক্ষে প্রচুর জায়গা ছিল:

$_=pop;($s,$e)=map"[\Q$_\E]",@ARGV;for(split/($s|$e)/){print"  "x($i-=/$e/),"$_\n"if$_;$i+=/$s/}

... এবং আরও কিছু:

$_=pop;($s,$e)=map"[\Q$_\E]",@ARGV;map{print"  "x($i-=/$e/),"$_\n"if$_;$i+=/$s/}split/($s|$e)/

3

ম্যাথমেটিকা ​​(নন কোড গল্ফ)

indent[str_String]:=Module[{ind,indent,f},
ind=0;
indent[i_]:="\n"<>Nest["    "<>ToString[#]&,"",i];
f[c_] :=  (indent[ind] <> c <> indent[++ind]) /; StringMatchQ["[({",___~~c~~___];
f[c_] := ( indent[--ind] <> c <>indent[ind])  /; StringMatchQ["])}",___~~c~~___];
f[c_] := (c <>indent[ind])       /; StringMatchQ[";,",___~~c~~___];
f[c_] := c  ;
f /@ Characters@ str//StringJoin
]

পরীক্ষা

indent["abc{xyz{text[note{comment(t{ex}t)abc}]}}"]
abc
{
    xyz
    {
        text
        [
            note
            {
                comment
                (
                    t
                    {
                        ex
                    }
                    t
                )
                abc
            }

        ]

    }

}

বোনাস হিসাবে, নিম্নলিখিত ফাংশনটি গণিতের এক্সপ্রেশনকে ফর্ম্যাট করতে ব্যবহার করা যেতে পারে

format[expr_] := indent[expr // FullForm // ToString]

সম্পাদনা করুন (নন কোড গল্ফ) যেভাবে নিউলাইনগুলি রেন্ডার করা হয়েছে তার উপর সূক্ষ্ম দানাদার নিয়ন্ত্রণের সাথে আপডেট হয়েছে

indent[str_String, ob_String, cb_String, delim_String] := 
  Module[{ind, indent, f, tab}, ind = 0; tab = "    ";
   indent[i_, tab_, nl_] := nl <> Nest[tab <> ToString[#] &, "", i];
   f[c_] := (indent[ind, "", " "] <> c <> indent[++ind, tab, "\n"]) /;StringMatchQ[ob, ___ ~~ c ~~ ___];
   f[c_] := (indent[--ind, "", " "] <> c <> indent[ind, tab, "\n"]) /;StringMatchQ[cb, ___ ~~ c ~~ ___];
   f[c_] := (c <> indent[ind, tab, "\n"]) /;StringMatchQ[delim, ___ ~~ c ~~ ___];
   f[c_] := c;
   f /@ Characters@str // StringJoin];
format[expr_] := indent[expr // InputForm // ToString, "[({", "])}", ";"];

format[Hold@Module[{ind, indent, f, tab}, ind = 0; tab = "    ";
 indent[i_, tab_, nl_] := nl <> Nest[tab <> ToString[#] &, "", i];
 f[c_] := (indent[ind, "", " "] <> c <> indent[++ind, tab, "\n"]) /;StringMatchQ[ob, ___ ~~ c ~~ ___];
 f[c_] := (indent[--ind, "", " "] <> c <> indent[ind, tab, "\n"]) /;StringMatchQ[cb, ___ ~~ c ~~ ___];
 f[c_] := (c <> indent[ind, tab, "\n"]) /;StringMatchQ[delim, ___ ~~ c ~~ ___];
 f[c_] := c;
 f /@ Characters@str // StringJoin]]

আউটপুট

Hold [
    Module [
         {
            ind, indent, f, tab }
        , ind = 0;
         tab = "    ";
         indent [
            i_, tab_, nl_ ]
         := StringJoin [
            nl, Nest [
                StringJoin [
                    tab, ToString [
                        #1 ]
                     ]
                 & , "", i ]
             ]
        ;
         f [
            c_ ]
         := StringJoin [
            indent [
                ind, "", " " ]
            , c, indent [
                ++ind, tab, "\n" ]
             ]
         /;
         StringMatchQ [
            ob, ___~~c~~___ ]
        ;
         f [
            c_ ]
         := StringJoin [
            indent [
                --ind, "", " " ]
            , c, indent [
                ind, tab, "\n" ]
             ]
         /;
         StringMatchQ [
            cb, ___~~c~~___ ]
        ;
         f [
            c_ ]
         := StringJoin [
            c, indent [
                ind, tab, "\n" ]
             ]
         /;
         StringMatchQ [
            delim, ___~~c~~___ ]
        ;
         f [
            c_ ]
         := c;
         StringJoin [
            f / @
                 Characters [
                    str ]
                 ]
             ]
         ]

এটি হ'ল কোড গল্ফ, এর মতো বহু চরিত্রের নাম indent। আপনার লক্ষ্য কি সর্বাধিক সংখ্যার কোড, বা পাঠযোগ্যতা? কোডটি সংক্ষিপ্ত করে তোলার বেশ কয়েকটি উপায় রয়েছে, যদি তা সত্যিই আপনার লক্ষ্য। এছাড়াও: "আপনি" প্রথম বন্ধনী "অক্ষরগুলির তালিকাটি হার্ড-কোড নাও করতে পারেন" " তবুও আপনি এখানে কি ঠিক তাই না? যাইহোক, এত নেতিবাচক শোনার জন্য দুঃখিত; এটি কেবল আপনার নিজের চ্যালেঞ্জের এক অদ্ভুত উত্তর হিসাবে আমাকে আঘাত করেছে।
মিঃ উইজার্ড

1
@ মিঃ উইজার্ড এটির কোড গল্ফ নয়, আমি এটি আমার নিজস্ব রেফারেন্সের জন্য যুক্ত করেছি [এটি পরিষ্কার করার জন্য আপডেট করা]। আমি প্রায়শই এটির চেয়ে অপ্রকাশিত গাণিতিক কোডটি বোঝার জন্য এটি ব্যবহার করি যা কোনও পৃষ্ঠার চেয়ে বড় হয়
প্রশান্ত ভাতে

3

জাভাস্ক্রিপ্ট, 255 227 205 টি অক্ষর

আরে, এর দৈর্ঘ্য একটি বাইটে পুরোপুরি ফিট করে! : ডি

function(s,e,t){R=eval.bind(0,"Array(n).join(' ')");for(i=n=0,b=r='';c=t[i++];)~s.indexOf(c)?(r+=b,b='\n'+R(++n)+c+'\n '+R(++n)):~e.indexOf(c)?b+='\n'+((n-=2)?R()+' ':'')+c+'\n'+(n?R()+' ':''):b+=c;return r+b}

এটি একটি ফাংশন, এটি প্রারম্ভিক অক্ষর, শেষ অক্ষর এবং তারপরে পাঠ্য দিন pass


আপনার নিজস্ব সম্পাদনা মন্তব্যটি আপনার বিরুদ্ধে ব্যবহৃত হয়েছে। : ডি
ডুরকনব

@ ডুরকনব: আমি ... আমি ভেবেছিলাম যে আমি কখনও এটি করিনি। ডি: আমি দুঃখিত। (আপনি শিকার করছেন?)
রাই-

@ ডুরকনব: এবং আমাকে এই সম্পর্কে মনে করিয়ে দেওয়ার জন্য ধন্যবাদ; সংক্ষিপ্ত :)
রাই-

না আমি শিকার করা হয় নি, শুধু এই প্রশ্নের উপর পদস্খলিত, কিন্তু আমি করার সিদ্ধান্ত নিয়েছে, এবং আমি পাওয়া এই হে: পি
Doorknob

2

পাইথন - 162 টি অক্ষর

i=f=0
s=""
l,r,z=[raw_input()for c in'   ']
o=lambda:s+("\n"+"  "*i)*f+c
for c in z:
 if c in l:f=1;s=o();i+=1
 elif c in r:i-=1;f=1;s=o()
 else:s=o();f=0
print s

নোট করুন যে টাস্কটি দুটি সেট বন্ধনী দুটি সেট ইনপুট অংশ হিসাবে কল, হার্ডকড না।
জোয়ি

@ জোয়ে উল্লেখ করেছেন, আমি কিছুক্ষণের মধ্যে এটি ঠিক করতে পারি। ধন্যবাদ
হুয়ান

2

পাইথন 2.7.X - 136 অক্ষর

import sys
a,c=sys.argv,0
for i in a[3]:
 if not(i in a[2]):print ' '*c+i
 else:print ' '*(c-4)+i
 if i in a[1]:c+=4
 if i in a[2]:c-=4

ব্যবহার : $ ./foo.py '(' ')' '(আব (সিডি (ইফ) ঘ) ij)'

ফলাফল আউটপুট:

(
    a
    b
    (
        c
        d
        (
            e
            f
        )
        g
        h
    )
    i
    j
)

printবিবৃতি দেওয়ার পরে আপনার কি স্পেস দরকার ?
জ্যাচার

2

সি - 213 209

আমি বোকা ভুল ঘৃণা করি ...>। <

#include<stdio.h>
#include<string.h>
int main(int i,char**s){for(char q,r,c,t,a=0;~(c=getchar());t=q|r){q=!!strchr(s[1],c);a-=r=!!strchr(s[2],c);for(i=0;t|q|r&&i<2*a+1;putchar(i++?' ':'\n'));a+=q;putchar(c);}}

প্রথম কমান্ড-লাইন আর্গুমেন্ট থেকে বাম-প্যারেন্স, দ্বিতীয় তর্ক থেকে ডান-প্যারেন্স এবং স্টিডিনে ইনডেন্ট ইনপুট পড়ুন।

বেশ-মুদ্রিত এবং মন্তব্য করেছে:

int main(int i, char **s) {
  for (char q, r, /* is left-paren? is right-paren? */
            c,    /* character read from input */
            t,    /* last char was a paren-char */
            a=0;  /* indentation */
       ~(c = getchar());
       t = q|r) {
         q = !!strchr(s[1],c);
    a -= r = !!strchr(s[2],c);
    for (i=0; t|q|r && i<2*a+1; putchar(i++? ' ' : '\n'));
    a += q;
    putchar(c);
  }
}

1

সি ( 159 225 চর)

#define q(s,c)strchr(s,c)
#define p(i,j,k)printf("\n%*s%c%c%*s",i,"",*s,k,j,"")
g(char*b,char*e,char*s){int i;for(i=0;*s;s++)q(b,*s)?p(i-2,i+=2,'\n'):q(e,*s)?q(b,*(s+1))||q(e,*(s+1))?p(i-=2,i-2,0):p(i-=2,i-2,'\n'):putchar(*s);}

খালি রেখাগুলি দিয়ে বাগটি ঠিক করার জন্য আমার জন্য অতিরিক্ত 66 টি অক্ষর খরচ হয়েছে :( সত্যি বলতে, আমার একটি নতুন পদ্ধতির প্রয়োজন, তবে আমি এখনই এটিকে একটি দিন বলব।

#define p(i,j)printf("\n%*s%c\n%*s",i,"",*s,j,"")
f(char*b,char*e,char*s){int i;for(i=0;*s;s++){strchr(b,*s)?p(i-2,i+=2):strchr(e,*s)?p(i-=2,i-2):putchar(*s);}}

একটি বরং দ্রুত এবং নোংরা পদ্ধতির। এটিতে ক্রমাগত বন্ধ হওয়া বন্ধনীগুলির মধ্যে খালি লাইন তৈরির একটি বাগ রয়েছে, তবে অন্যথায় এটি কাজ করে (বা তাই আমি মনে করি)। আমি আরও ভাল ও ক্লিনার সমাধানের জন্য এটি এই সপ্তাহে একবারে ঘুরে দেখব।

চর * বি হ'ল উদ্বোধনী প্রথম বন্ধনী সেট, চর * ই সমাপ্তি প্রথম বন্ধনী সেট এবং চর * এস ইনপুট স্ট্রিং।


1

পার্ল - 69 বাইট

TMTOWTDI কোড সহজ করে তোলে

#!perl -p
s/([[{(<])|([]})>])|\w+/"  "x($1?$t++:$2?--$t:$t)."$&
"/ge

3
আপনার অনুশীলনগুলি ইনপুট হিসাবে নেওয়ার কথা, এগুলি হার্ডকোড নয়।
গ্যারেথ

1

স্কালা (২.৯), ২১১ টি অক্ষর

object P extends App{def x(j:Int)={"\n"+"  "*j}
var(i,n)=(0,"")
for(c<-args(2)){if(args(0).exists(_==c)){print(x(i)+c)
i+=1
n=x(i)}else{if(args(1).exists(_==c)){i-=1
print(x(i)+c)
n=x(i)}else{print(n+c)
n=""}}}}

1

পার্ল - 89 85 বাইট

হোজুং ইউনের উত্তরের একটি সংস্করণ যা দুটি যুক্তি দিয়ে ব্লক অক্ষরগুলি গ্রহণ করে।

#!perl -p
BEGIN{$b=pop;$a=pop}s/([$a])|([$b])|\w+/"  "x($1?$t++:$2?--$t:$t)."$&
"/ge

যেমন বলা হয়:

perl golf.pl<<<'abc{xyz{text[note{comment(t{ex}t)abc}]}}' '[{(<' ']})>'

খুব ভাল ধারণা, @ হুজং এবং সর্পিগাল। যদিও এটি কিছুটা নাজুক। উদাহরণস্বরূপ, ঘনিষ্ঠ-পেরেন আর্গুমেন্টে] এবং sw অদলবদল করুন এবং]] অক্ষর শ্রেণিটি বন্ধ করে দেয় যা একটি তুলনাহীন পেরেন ত্রুটির দিকে পরিচালিত করে। একইভাবে, ধরুন ওপেন সেটটি ^ দিয়ে শুরু হয়, সম্ভবত নিকটে সেটটিতে ভিয়ের সাথে মেলে; আপনি উদ্দেশ্যযুক্ত [$ a] শ্রেণীর পরিপূরক পাবেন। এজন্য আমি আমার উত্তরে \ প্রশ্ন ... \ ই ব্যবহার করেছি। নন-প্যারেন অক্ষরের জন্য \ ডাব্লু + উদাহরণটির জন্য কাজ করে তবে 'x (ফু-বার) y' '(' ')' এর মতো ইনপুটটির কী হবে? অবশ্যই, কোডটি এমন কিছু হ্যান্ডেল করার প্রয়োজন তা পরিষ্কার নয়।
DCharness

1

পাইথন 3, 184 182 অক্ষর

import sys
_,p,q,t=sys.argv
i,f,x=0,1,print
for e in t:
 if e in p:f or x();x(' '*i+e);i+=2;f=1
 elif e in q:f or x();i-=2;f=1;x(' '*i+e)
 else:not f or x(' '*i,end='');f=x(e,end='')

উদাহরণ:

$ python3 ./a.py '{[(<' '}])>' 'abc{xyz{text[note{comment(t{ex}t)abc}]}}'
abc
{
  xyz
  {
    text
    [
      note
      {
        comment
        (
          t
          {
            ex
          }
          t
        )
        abc
      }
    ]
  }
}

হেইনরিচ ৫৯৯১ দ্বিতীয় লাইনে পরিবর্তন করে দুটি চরিত্র সংরক্ষণের পরামর্শ দিয়েছেন_,p,q,t=sys.argv
পিটার টেলর

1

গ্রোভি, 125

p=args;i=0;s={a,b->"\n"+"\t"*(b?i++:--i)+a+"\n"+"\t"*i};p[0].each{c->print p[1].contains(c)?s(c,1):p[2].contains(c)?s(c,0):c}

আপনি স্ক্রিপ্টটি কোনও ফাইল indent.groovy এ সংরক্ষণ করতে পারেন এবং এটি দিয়ে চেষ্টা করতে পারেন:
গ্রোভি ইনডেন্ট.groovy "abc {xyz {পাঠ্য [নোট {মন্তব্য (টি {প্রাক্তন} t) abc}]}}" "{[(" ") ]} "


আপনার উত্তরটি দেখার আগে আমি এক ঘন্টার জন্য গ্রোভিতে চেষ্টা করেছিলাম, আমি একই ধরণের অ্যাপ্রোচ ব্যবহার করেছি, তবে আমার আপনার চেয়ে অনেক বেশি দীর্ঘ তাই আমি পোস্টটিও বিরক্ত করব না .. ভাল কাজ! :)
Fels

1

পাইথন - 407

from sys import*;o=argv[1];c=argv[2];t=argv[3];p=0;n=False;a=lambda:h not in e;b=lambda s:print(s+(" "*p)+h);r="";e=o+c
for h in t:
 for k in o:
  if h==k:
   if(r in e)and(r!=""):b("")
   else:b("\n")
   p+=2;n=True;break
 for k in c:
  if h==k:
   p-=2
   if(r in e)and(r!=""):b("")
   else:b("\n")
   n=True;break
 if a()and n:print((" "*p)+h,end="");n=False
 elif a():print(h,end="")
 r=h

প্রোগ্রামটির একটি নিরবচ্ছিন্ন সংস্করণ:

import sys

open_set = sys.argv[1]
close_set = sys.argv[2]
text = sys.argv[3]
spaces = 0
newline = False
a = lambda : char not in b_set
b = lambda s: print(s + (" " * spaces) + char)
prev = ""
b_set = open_set + close_set

for char in text:
    for bracket in open_set:
        if char == bracket:
            if (prev in b_set) and (prev != ""):
                b("")
            else:
            b("\n")
        spaces += 2
        newline = True
        break
    for bracket in close_set:
        if char == bracket:
            spaces -= 2
            if (prev in b_set) and (prev != ""):
                b("")
            else:
                b("\n")
            newline = True
            break
    if a() and newline:
        print((" " * spaces) + char, end="")
        newline = False
    elif a():
        print(char, end="")
    prev = char

প্রোগ্রামটির আর্গুমেন্টগুলি হ'ল (ক্রমানুসারে): খোলার বন্ধনী, সমাপনী বন্ধনী এবং পাঠানো টেক্সট।

উদাহরণ (command হ'ল কমান্ড লাইন প্রম্পট):

$ python indent.py "{[(<" "}])>" "abc{xyz{text[note{comment(t{ex}t)abc}]}}"
abc
{
  xyz
  {
    text
    [
      note
      {
        comment
        (
          t
          {
            ex
          }
          t
        )
        abc
      }
    ]
  }
}

0

ডি (300)

C[] i(C,S)(ref S s,C p){if(!*s)return[];static C[] w;w~=" ";C[] r;C c=s[0];while(c!=p){s=s[1..$];r~=(c=='{'||c=='['||c=='<'?"\n"~w~c~"\n"~i(s,cast(char)(c+2)):c=='('?"\n"~w~c~"\n"~i(s,')'):[c]);c=*s;}w=w[1..$];if(*s)s=s[1..$];c=*s;return" "~w~r~"\n"~w~(c=='}'||c==']'||c=='>'||c==')'?[p]:p~"\n"~w);}

বাউন্ডস চেকের জন্য একটি নাল টার্মিনেটেড স্ট্রিং if(*s)দরকার (অন্যথায় প্রয়োজনগুলিতে পরিবর্তন করা দরকার if(s.length))


নোট করুন যে টাস্কটি দুটি সেট বন্ধনী দুটি সেট ইনপুট অংশ হিসাবে কল, হার্ডকড না।
জোয়ি

0

জাভা

নন codegolf version! ধরে নিলাম আমাদের বিভাজনের এই সংস্করণ রয়েছে () যার মধ্যে ডিলিমগুলি রয়েছে,

public static String indent(String input, String openPars,
        String closingPars) {
    String re = "["
            + (openPars + closingPars).replace("[", "\\[").replace("]",
                    "\\]") + "]";
    String[] split = inclusiveSplit(input, re, 0);
    int indent = 0;
    StringBuilder sb = new StringBuilder();
    for (String string : split) {
        if (StringUtils.isEmpty(string))
            continue;
        if (closingPars.indexOf(string) != -1) {
            indent--;
        }
        sb.append(StringUtils.repeat(" ", indent * 2));
                    sb.append(string);
                    sb.append("\n");
        if (openPars.indexOf(string) != -1) {
            indent++;
        }
    }
    String string = sb.toString();
    return string;
}

2
StringUtilsস্ট্যান্ডার্ড জেডিকে-র অংশ নয়।
st0le

0

সি 284 নন হোয়াইট স্পেস অক্ষর

আমি হতাশার কোনও ভক্ত নই তবে ভাল ...

#include<cstdio>
#include<cstring>
#define g printf
#define j char
int main(int a,j**b){int c=0;for(j*f=b[3];*f!='\0';++f){if(strchr(b[1],*f)!=0){g("\n%*c\n%*c",c,*f,c+2,'\0');c+=2;}else if(strchr(b[2],*(f))!=0){c-=2;g("\n%*c",c,*f);if(strchr(b[2],*(f+1))==0)g("\n%*c",c,'\0');}else putchar(*f);}}

ব্যবহার:। / প্রোগ্রাম শুরুর_ বন্ধনী শেষ_ বন্ধনী স্ট্রিং_ থেকে_ পার্স


0

পিএইচপি (187) (153)

function a($s,$o,$e){while(''!=$c=$s[$i++]){$a=strpbrk($c,$o)?2:0;$b=strpbrk($c,$e)?2:0;echo ($a+$b||$r)?"\n".str_pad('',$t-=$b):'',$c;$t+=$a;$r=$a+$b;}}

ফাংশনটি স্ট্রিং নেয়, ডিলিমিটার খোলার সাথে সাথে ডিলিমিটারকে আর্গুমেন্ট হিসাবে শেষ করে।


0

সি, 256

পরামিতি:

  • শেষ চর,
  • এন হ'ল ইনডেন্টেশন,
  • b খোলার বন্ধনী,
  • ডি বন্ধনী বন্ধনী।

অনুভূমিক স্ক্রোলবার এড়ানোর জন্য আমি কোডটি ভেঙে ফেলেছি।

#define r char
#define P(c) putchar(c);
#define N P(x)
#define W printf("%*s",n,"");
r*s,x='\n';i(r e,int n,r*b,r*d){r*t=s,*p;int l=0;W while(*s!=e)    
{if(p=strchr(b,*s)){if(s!=t){N W}P(*s++)N i(d[p-b],n+2,b,d); N W 
P(*s++);l=1;}else{if(l){N W l=0;}P(*s++)}}}

সম্পূর্ণ প্রোগ্রামটি 363 টি অক্ষর।

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define r char
#define P(c) putchar(c);
#define N P(x)
#define W printf("%*s",n,"");
r*s,x='\n';i(r e,int n,r*b,r*d)
{r*t=s,*p;int l=0;W while(*s!=e)
{if(p=strchr(b,*s)){if(s!=t){N W}
P(*s++)N i(d[p-b],n+2,b,d); N W
P(*s++);l=1;}else{if(l){N W l=0;}
P(*s++)}}}main(int c,r*v[]){s =
v[3];i('\0',0,v[1],v[2]);}

0

VB.net (? গ)

ভাষা কোড গল্ফিংয়ের পক্ষে উপযুক্ত নয়, তাই আমি একটি অস্বাভাবিক পদ্ধতি ব্যবহার করেছি। কনসোল থেকে আউটপুট পেতে ট্রেস শ্রোতাদের ব্যবহার।

Imports System.Diagnostics.Debug
Module Module1
  Sub Main(args() As String)
    IndentText(args(0), args(1), args(2)) 'openings, closings, text)
  End Sub
  Sub IndentText(o As String, e As String, t As String)
    Dim x = 0
    Listeners.Add(New Diagnostics.ConsoleTraceListener)
    IndentSize = 2
    For Each c In t
      If o.Contains(c) Then
        WriteLine("")
        WriteLine(c)
        Indent()
        x = 1
      ElseIf e.Contains(c) Then
        If x = 0 Then WriteLine("")
        Unindent()
        WriteLine(c)
        x = 1
      Else
        Write(c)
        x = 0
      End If
    Next
  End Sub
End Module

ইনপুটটির জন্য কমান্ডলাইন আরোগুলি ব্যবহার করে

args(0) is the indenting chars
args(1) is the undenting chars
args(2) is the text to be indented.

0

পাওয়ারশেল, 146 বাইট

param([char[]]$s,[char[]]$e,[char[]]$f)$f|%{}{if($_-in$s){$o;'  '*$i+$_;$o='  '*++$i;}elseif($_-in$e){$o;'  '*--$i+$_;$o='  '*$i}else{$o+=$_}}{$o}

অবহেলিত ব্যাখ্যা

param([char[]]$start,             # Cast as array of Chars
      [char[]]$end,
      [char[]]$string)
$string | foreach-object { } {    # For every char in string. Empty Begin block
    if ( $_ -in $start ) {        # If char is in start
        $o                        # Print stack ($o)
        '  ' * $i + $_            # Newline, indent, insert start char
        $o = '  ' * ++$i          # Set stack to ident (incremented)
    } elseif ( $_ -in $end ) {    # If char is in end
        $o                        # Print stack
        '  ' * --$i + $_          # Newline, decrement indent, insert end char
        $o = '  ' * $i            # Set stack to indent
    } else {
        $o+ = $_                  # Otherwise add character to stack
    }
} { $o }                          # Print remaining stack (if any)

0

সি, 181 টি অক্ষর

#define d(m,f)if(strchr(v[m],*s)){puts("");for(j=f;j--;)printf("  ");}
i;main(j,v,s)char**v,*s;{for(s=v[3];*s;s++){d(1,i++)d(2,--i)putchar(*s);d(1,i)if(!strchr(v[2],*(s+1)))d(2,i)}}

খুব কল্পনাযোগ্যভাবে সবচেয়ে সোজাসাপ্টা পদ্ধতির। স্ট্রিং (v [3]) এর মাধ্যমে ইটারেট করুন, যদি এটি একটি বামবন্ধনী থাকে (v [1] তে সংজ্ঞায়িত হয়), তবে ইনডেন্ট স্তরটি বাড়ান, যদি এটি একটি ডান ধনুর্বন্ধনী (v [2] অনুসারে সংজ্ঞায়িত) হয়, তবে ইনডেন্ট স্তরটি হ্রাস করুন ।


-1

সি, 114 121

main(i,x,s,c){while(~(c=getchar()))(s=x)|(x=2*!!strchr("(){}[]<>",c))?s=c-1&x,i-=x-2*s,printf("\n%*c",i-s,c):putchar(c);}

খুব সুন্দর নয়, তবে একটি সমাধান .. একটি প্রথম বন্ধনী দিয়ে ইনপুট শুরু / সমাপ্ত হয় কিনা তার উপর নির্ভর করে একটি ফাঁকা লাইন আগে / পরে উপস্থিত হতে পারে।

নতুন সীমাবদ্ধতার সাথে, এই পদ্ধতির গল্ফ করার জন্য প্রায় অকেজো।


প্রারম্ভিক বন্ধনীগুলি যথেষ্ট পরিমাণে ইনডেন্ট করে না এবং একটানা বন্ধ হওয়াগুলির মধ্যে খালি লাইন আউটপুট দেয়।
জোয়ি

@ জোয়ে ফিক্সড, ফিডব্যাকের জন্য আপনাকে ধন্যবাদ!
esneider

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