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


79

সঠিকভাবে সুষম বন্ধনীগুলির একটি খালি খালি স্ট্রিং বিবেচনা করুন:

(()(()())()((())))(())

আমরা কল্পনা করতে পারি যে প্রতিটি জুটি বন্ধনী একটি ধসে দূরবীন নির্মাণে একটি রিং উপস্থাপন করে । সুতরাং আসুন দূরবীণটি প্রসারিত করুন:

(                )(  )
 ()(    )()(    )  ()
    ()()    (  )
             ()

আরেকটি উপায় এটি তাকান যে গভীরতায় প্রথম বন্ধনী হয় এন লাইন করার জন্য অনুপ্রাণিত হই এন , যখন তাদের আনুভূমিক অবস্থান রাখা।

আপনার কাজ হ'ল ভারসাম্যযুক্ত বন্ধনীগুলির একটি স্ট্রিং নেওয়া এবং বর্ধিত সংস্করণ উত্পাদন করা।

আপনি STDIN (অথবা নিকটতম সমতুল্য), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন প্যারামিটারের মাধ্যমে ইনপুট গ্রহণ এবং STDOUT (বা নিকটতম সমতুল্য), রিটার্ন মান বা ফাংশন (আউট) প্যারামিটারের মাধ্যমে আউটপুট উত্পাদন করে একটি প্রোগ্রাম বা ফাংশন লিখতে পারেন।

আপনি ধরে নিতে পারেন যে ইনপুট স্ট্রিংটি বৈধ, অর্থাত্ কেবলমাত্র প্রথম বন্ধনী রয়েছে, যা সঠিকভাবে ভারসাম্যযুক্ত।

আপনি প্রতিটি লাইনে ট্রেলিং স্পেসগুলি মুদ্রণ করতে পারেন, তবে প্রয়োজনের চেয়ে আর কোনও শীর্ষস্থানীয় জায়গা নেই। মোট লাইনগুলি ইনপুট স্ট্রিংয়ের দৈর্ঘ্যের দ্বিগুণের বেশি হওয়া উচিত নয়। আপনি allyচ্ছিকভাবে একটি একক পেছনের নতুন লাইন মুদ্রণ করতে পারেন।

উদাহরণ

উপরের উদাহরণটি ছাড়াও, এখানে আরও কয়েকটি পরীক্ষার মামলা রয়েছে (ইনপুট এবং আউটপুট খালি রেখার দ্বারা পৃথক করা হয়েছে)।

()

()
(((())))

(      )
 (    )
  (  )
   ()
()(())((()))(())()

()(  )(    )(  )()
   ()  (  )  ()
        ()
((()())()(()(())()))

(                  )
 (    )()(        )
  ()()    ()(  )()
             ()

সম্পর্কিত চ্যালেঞ্জগুলি:

  • টপোগ্রাফিক স্ট্রিংস , যা আপনাকে এই চ্যালেঞ্জের আউটপুটটির মূলত পরিপূরক কি তা উত্পাদন করতে বলে।
  • কোড ব্যাখ্যার বিন্যাস, এই চ্যালেঞ্জের ধারণাগুলির একটি বিস্তৃত সাধারণীকরণ, সম্প্রতি ফিল্নটপিআই পোস্ট করেছেন। (আসলে, ফিলোনাটপি'র তাঁর ধারণার মূল বর্ণনাটিই এই চ্যালেঞ্জকে অনুপ্রাণিত করেছিল))

লিডারবোর্ড

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

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেম্পলেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

# Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

# Ruby, <s>104</s> <s>101</s> 96 bytes


17
বিকল্প শিরোনাম: ডি-লিস্প- ify একটি স্ট্রিং। : পি
অ্যালেক্স এ।

1
আউটপুট এর রঙের উপর কোন বিধিনিষেধ আছে?
মাত্তেও ইতালি

1
@ মার্টিনবাটনার: কিছুই নয়, আমি একটি পরিষ্কার উপায় খুঁজে পেয়েছি; এর ঠিক বলে যে আমার আগের ধারণা একটি বাইট সব বদ্ধ প্রথম বন্ধনী যাব চাঁচা যেত দিন জ্বলজ্বলে সায়ান উপর নীল ... :-)
Matteo ইতালিয়া

8
@ মাট্টিও ইটালিয়া ওহ godশ্বর, আমি খুশী যে ঘটেনি ;)
মার্টিন এন্ডার

12
@ মাত্তিও ইটালিয়া: সেই সংস্করণটি পোস্ট করুন! এটা দেখার যোগ্য.
ব্যবহারকারী 2357112

উত্তর:


8

সিজেম, 17 16 15 বাইট

0000000: 72 3a 69 22 28 0b 20 9b 41 29 22 53 2f 66 3d     r:i"(. .A)"S/f=

উপরেরটি একটি বিপরীতমুখী এক্সএক্সডি ডাম্প, যেহেতু উত্স কোডটিতে অচিহ্নিত অক্ষর ভিটি (0x0 বি) এবং সিএসআই (0x9 বি) রয়েছে।

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

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

টেস্ট রান

আমাদের শেল ভেরিয়েবল LANG এবং টার্মিনাল এমুলেটরটির এনকোডিংটি আইএসও 8859-1 এ সেট করতে হবে। প্রাক্তন সম্পাদন দ্বারা অর্জন করা হয়

$ LANGsave="$LANG"
$ LANG=en_US

এছাড়াও, প্রকৃত কোড কার্যকর করার আগে, আমরা প্রম্পটটি অক্ষম করব এবং স্ক্রিনটি সাফ করব।

$ PS1save="$PS1"
$ unset PS1
$ clear

এটি নিশ্চিত করে যে আউটপুটটি সঠিকভাবে প্রদর্শিত হয়েছে।

echo -n '()(())((()))(())()' | cjam <(base64 -d <<< cjppIigLIJtBKSJTL2Y9)
()(  )(    )(  )()
   ()  (  )  ()
        ()

ল্যাং এবং প্রম্পটটি পুনরুদ্ধার করতে , এটি সম্পাদন করুন :

$ LANG="$LANGsave"
$ PS1="$PS1save"

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

আমরা কার্সারটি উপরে সরিয়ে নিতে প্রতিটিটির পরে একটি উল্লম্ব ট্যাব সন্নিবেশ করি ( কার্সারটি নীচে সরানোর জন্য এবং প্রতিটিটির আগে বাইট সিকোয়েন্স 9 বি 41 ( "\x9bA") )

r         e# Read a whitespace-separated token from STDIN.
:i        e# Replace each character by its code point.
          e#   '(' -> 40, ')' -> 41
"(. .A)"  e# Push the string "(\v \x9bA)".
S/        e# Split at spaces into ["(\v" "\x9bA)"].
f=        e# Select the corresponding chunks.
          e# Since arrays wrap around in CJam, ["(\v" "\x9bA)"]40= and 
          e# ["(\v" "\x9bA)"]41= select the first and second chunk, respectively.

49

x86 মেশিন কোড, 39 34 33 30 29 বাইট

00000000  68 c3 b8 07 31 ff be 82  00 b3 a0 ad 4e 3c 28 7c  |h...1.......N<(||
00000010  f0 77 05 ab 01 df eb f3  29 df ab eb ee           |.w......)....|
0000001d

কিছু কৌশল সহ ডস-এর জন্য x86 সমাবেশ:

    org 100h

section .text

start:
    ; point the segment ES to video memory
    ; (c3 is chosen so that it doubles as a "ret")
    push 0b8c3h
    pop es
    ; di: output pointer to video memory
    xor di,di
    ; si: input pointer from the command line
    mov si,82h
    ; one row=160 bytes (assume bh=0, as should be)
    mov bl,160
lop:
    ; read & increment si (assume direction flag clean)
    ; we read a whole word, so that later we have something nonzero to
    ; put into character attributes
    lodsw
    ; we read 2 bytes, go back 1
    dec si
    ; check what we read
    cmp al,'('
    ; less than `(`: we got the final `\n` - quit
    ; (we jump mid-instruction to get a c3 i.e. a ret)
    jl start+1
    ; more than `(`: assume we got a `)`
    ja closed
    ; write a whole word (char+attrs), so we end
    ; one position on the right
    stosw
    ; move down
    add di,bx
    ; rinse & repeat
    jmp lop
closed:
    ; move up
    sub di,bx
    ; as above
    stosw
    jmp lop

সীমাবদ্ধতা :

  • এটি সর্বদা মুছে ফেলা ব্যতীত স্ক্রিনের নীচে থেকে শুরু করে প্রিন্ট করে; একটি clsচালানোর আগে প্রায় বাধ্যতামূলক;
  • রং কুরুচিপূর্ণ; এখানে এবং সেখানে দুটি বাইট সংরক্ষণ করার জন্য রঙের বৈশিষ্ট্য হিসাবে পরবর্তী চরিত্রটিকে পুনর্ব্যবহার করার ফলাফল এটি;
  • কোডটি অনুমান করা হয় bh=0এবং দিকনির্দেশ পতাকাটি প্রারম্ভকালে পরিষ্কার হয়, উভয়ই অননুমোদিত; OTOH, bxআমি যে সমস্ত ডস ভেরিয়েন্ট দেখেছি সেগুলিতে স্পষ্টভাবে শূন্যে সেট করা আছে (ডসবক্স, এমএস-ডস 2, ফ্রিডস) এবং যেখানেই আমি পরীক্ষা করেছি পতাকাগুলি ইতিমধ্যে ঠিক আছে।

এখানে চিত্র বর্ণনা লিখুন


শুধু এটি যাচাই করা হয়েছে। হ্যাঁ এটা কাজ করে. আপনি কি নিশ্চিত যে আপনার করা দরকার cld?
FUZxxl

@ এফজেডএক্সএক্সএক্সএল: ডসবক্সে এটি এটি ব্যতীতও দুর্দান্ত কাজ করে, তবে এর উত্সগুলি দেখে এটি বলেছে যে ডস এবং টিআরএসে এর আগে যা ঘটেছিল তা থেকে পতাকাগুলি সংরক্ষণ করা হয়েছে, তাই সম্ভবত এটি নিরাপদভাবে খেলতে হবে। যাইহোক, এটি কেবলমাত্র একটি বাইট হবে, আসল বেতনটি হ'ল কমপক্ষে একটি বড় (= 4 বাইট প্রতিটি) add/ কে মেরে ফেলতে হবে sub
মাত্তেও ইতালি

এইচএম ... আসলেই কোন ধারণা নেই।
FUZxxl

আপনি কি পরিবর্তন lopকরতে পারেন loop?
mbomb007

@ এমবিম্ব ২০০7: সম্ভবত? আমি নিশ্চিত নই nasmযে loopএটি একটি লেবেল এবং loopসমাবেশের নির্দেশের মধ্যে বিভ্রান্ত হয় কিনা , তাই আমি lopঅন্য সবার মতোই লিখি ।
মাত্তেও ইটালিয়া

28

জে, 32 28 বাইট

এটি একটি মজার এক।

0|:')(('&(i.-<:@+/\@i:){."0]

ব্যাখ্যা

এটি কীভাবে গল্ফ হয়েছে তার ব্যাখ্যা সহ এই সমাধানটি কীভাবে কাজ করে works

   NB. Let a be a test case
   a =. '((()())()(()(())()))'

   NB. level alterations
   _1 + ').(' i. a
1 1 1 _1 1 _1 _1 1 _1 1 1 _1 1 1 _1 _1 1 _1 _1 _1

   NB. absolute levels
   +/\ _1 + ').(' i. a
1 2 3 2 3 2 1 2 1 2 3 2 3 4 3 2 3 2 1 0

   NB. adjusted levels
   (+/\ _1 + ').(' i. a) - ')(' i. a
0 1 2 2 2 2 1 1 1 1 2 2 2 3 3 2 2 2 1 0

   NB. take level from end of each item of a and transpose
   |: a {."0~ _1 - (+/\ _1 + ').(' i. a) - ')(' i. a
(                  )
 (    )()(        ) 
  ()()    ()(  )()  
             ()     

   NB. code as a tacit verb
   [: |: ] {."0~ _1 - ([: +/\ _1 + ').(' i. ]) - ')(' i. ]

   NB. subtractions pulled into the prefix insert
   [: |: ] {."0~ (')(' i. ]) - [: <:@+/\ ').(' i. ]

   NB. i: instead of i. so we can use the same string constant
   [: |: ] {."0~ (')((' i. ]) - [: <:@+/\ ')((' i: ]

   NB. get rid of the caps
   0 |: ] {."0~ (')((' i. ]) - ')((' <:@+/\@i: ]

   NB. join the two usages of ')((' into a single dyadic phrase
   0 |: ] {."0~ ')((' (i. - <:@+/\@i:) ]

   NB. bond ')((' and flip arguments to {."0
   0 |: ')(('&(i. - <:@+/\@i:) {."0 ]

1
খুব সুন্দর! সমাধান মহান অংশ পূর্ণ!
এলোমেলো

1
(আমি সাধারণত ফাংশনটির একটি অনুরোধ যোগ করি যাতে অভিজ্ঞ-অভিজ্ঞ ব্যবহারকারীরাও এটি ব্যবহার করে দেখতে পারেন))
র্যান্ডম্রা

এই সমাধানটি আমার মাথায় আঘাত দেয়:')
নিক হার্টলি

@ কিপেসট্যাক্স আমি এটিকে প্রশংসা হিসাবে নিই।
FUZxxl

@FUZxxl এটি এটি আপনার উত্তরে উপস্থিত অক্ষরের ক্রমের উপর ভিত্তি করে এটি একটি শ্লেষও।
নিক হার্টলি

15

সি, 150 বাইট

t;f(char*c){char l=strlen(c)+1,o[l*l],*A=o,m=0;for(t=1;t<l*l;t++)o[t-1]=t%l?32:10;for(t=-1;*c;c++)A++[l*(*c-41?++t>m?m=t:t:t--)]=*c;A[m*l]=0;puts(o);}

এটি গল্ফের জন্য পাগল মজা ছিল । আমি এখনও বিশ্বাস করি না যে আমি এটি দিয়ে শেষ করেছি।

আমরা একটি একক ফাংশন সংজ্ঞায়িত fকরি, এটি স্ট্রিংটিকে ইনপুট হিসাবে নেয় এবং স্টডআউটে আউটপুট দেয়।

কোডের মাধ্যমে চলুন, লাইন দিয়ে লাইন চলুন:

/* t will represent the current depth of a parentheses. It must be an int. */
t;
f(char*c){
    //Our variables:
    char l=strlen(c)+1,    //The length of each row of output, including newlines
         o[l*l],           //The output string. It's way larger than it needs to be.
         *A=o,             //We need another pointer to keep track of things.
         m=0;              //The maximum depth recorded thus far.

    for(t=1;t<l*l;t++)     //For each character in our output...
        o[t-1]=t%l?32:10;  //If it's at the end of a line, make it '\n'. Else, ' '.
    for(t=-1;*c;c++)       //While we have an input string...
        //Perhaps a personal record for ugliest warning-less line...
        A++[l*(*c-41?++t>m?m=t:t:t--)]=*c;
    /* 
        A breakdown:
        A++        --> Go to the next *column* of output, after writing. 
                   --> There will only ever be one parentheses per output column.
        [l*(...)]  --> A[l*X] is the character in the current column at depth X.
        (*c-41?    --> If the character is a '('...    
        ++t>m?     --> Increment t *before* we write it. If this is a new highest depth
        m=t:       --> Set m to t, and set the whole expression to t.
        t:         --> If it's not a new highest depth, don't set m.
        t--)       --> If the character was a ')', decrement t *after* we write it.
        =*c        --> Write our output character to whatever the input read.
    */    

    A[m*l]=0; //The last character of the maximum-depth line should be null terminated.
    puts(o);  //Output!
}

আপনার যে কোনও প্রশ্নের উত্তর দেব!

অনলাইনে একটি পরীক্ষা প্রোগ্রাম চেষ্টা করুন !


আমি মনে রাখতে চাই যে "চর এল = স্ট্রেন (সি) +1, ও [এল * এল]" বৈধ নয় কারণ আপনি এর মতো ভেরিয়েবল সাইজের অ্যারে সংজ্ঞায়িত করতে পারবেন না, তবে আমি 15 বছর পেরিয়েছি যখন আমি কিছু চেষ্টা করেছি সি হিসাবে এই সাজান
স্পার

@ স্পার আমার সংকলক এমনকি কোনও সতর্কতাও ছুঁড়ে না। আমি বিশ্বাস করি সি৯৯ এ এটি "অফিশিয়ালি" স্ট্যান্ডার্ড ছিল। আমি এর জন্য একটি রেফারেন্স সন্ধান করার চেষ্টা করব।
ব্রেনস্টিল

1
@ স্পার এখানে একটি উল্লেখ আছে।
ব্রেইনস্টিল

ধন্যবাদ। কয়েক বছর আগে 15 এর কাছাকাছি জিনিস (কিছু দেওয়া বা নেওয়া) এর পরিবর্তিত বলে মনে হচ্ছে :)
স্পার

1
এটা তোলে @CoolGuy কিন্তু পরবর্তী কল করবে f, m0. এই হিসাবে "আপনার পরিবেশ ভঙ্গ," বেআইনী ঘোষনা বড়, মোট ছাত্র রিসেট করবে না এখানে
ব্রেইনস্টিল

15

রেটিনা + বাশ, 27 বাইট (14 + 10 + 3 = 27)

এটি এএনএসআই পলায়ন ব্যবহার করে:

\(
(\e[B
\)
\e[A)

সমান sed -e "s/(/(\\\e[B/g;s/)/\\\e[A)/g"\e[Bপালাবার কোড মানে নিচে নামার কার্সার এক সারি, এবং \e[Aমানে এক সারি আপ কার্সার সরানোর, তাই এই সমাধান কেবল পরে এবং শুরু ও প্রথম বন্ধনী প্রতিটি নেস্টেড যুগল শেষ হওয়ার আগে ঐ কোড সন্নিবিষ্ট করে। ইনপুটটি এসটিডিনের মধ্য দিয়ে যায়।

printf $(Retina ...)আউটপুটটি সঠিকভাবে দেখতে আপনাকে এটি কল করতে হবে।

আউটপুট

(((())))
(\e[B(\e[B(\e[B(\e[B\e[A)\e[A)\e[A)\e[A)
^C
amans:~ a$ printf "(\e[B(\e[B(\e[B(\e[B\e[A)\e[A)\e[A)\e[A)"
(      )amans:~ a$ 
 (    )
  (  )
   ()

((()())()(()(())()))
(\e[B(\e[B(\e[B\e[A)(\e[B\e[A)\e[A)(\e[B\e[A)(\e[B(\e[B\e[A)(\e[B(\e[B\e[A)\e[A)(\e[B\e[A)\e[A)\e[A)
^C
amans:~ a$ printf "(\e[B(\e[B(\e[B\e[A)(\e[B\e[A)\e[A)(\e[B\e[A)(\e[B(\e[B\e[A)(\e[B(\e[B\e[A)\e[A)(\e[B\e[A)\e[A)\e[A)"
(                  )amans:~ a$ 
 (    )()(        )
  ()()    ()(  )()
             ()

1
ভাল, খারাপ না! আপনি যদি কোনও নির্দিষ্ট টার্মিনালটিতে নির্দেশ করতে পারেন তবে এটিরprintf দুর্দান্ত দরকার নেই । অন্যথায়, আমি মনে করি এটি কেবলমাত্র | printfবাইট গণনায় যুক্ত করা ন্যায়সঙ্গত হবে ।
মার্টিন ইন্ডার

@ মার্টিনব্যাটনার এটি হওয়া উচিত printf $()বা printf $(Retina )
jimmy23013

1
রেটিনা কী জিনিস?
FUZxxl

2
@FUZxxl এটি আমার নিজস্ব রেজেক্স-ভিত্তিক প্রোগ্রামিং ভাষা। গিটহাব দেখুন
মার্টিন এন্ডার

2
কেন \eপ্লাস printf? আপনি কেবল প্রতিস্থাপনের ধরণে নিয়ন্ত্রণের অক্ষরগুলি রাখতে পারেন put
ডেনিস

15

টিআই-বেসিক, 69 60 56 55 বাইট

এটি ক্যালকুলেটরগুলির TI-83 + / 84 + পরিবারের জন্য, যদিও এটি একটি 84+ সি রৌপ্য সংস্করণে লেখা হয়েছিল।

ভ্যাট + আকারের তথ্য অন্তর্ভুক্ত হওয়ার কারণে প্রোগ্রামটি বৃহত্তর অন-ক্যালক দেখায়। এছাড়াও, এখানে 56 টিরও বেশি অক্ষর রয়েছে; এটির 56 টি বাইটের কারণ হ'ল একের বেশি অক্ষরযুক্ত সমস্ত কমান্ডগুলি টোকেনগুলিতে সঙ্কুচিত হয় যা আকারে এক বা দুটি বাইট হয়।

Input Str1
1→B
For(A,1,length(Str1
sub(Str1,A,1→Str2
Ans="(
Output(B+Ans,A,Str2
B-1+2Ans→B
End

থমাস-কোয়া কে ধন্যবাদ আরেকটি বাইট বন্ধ করে দেওয়া ! (এছাড়াও তাঁর কাছ থেকে 60০ থেকে ৫ 56 বছর বয়সে লাফানো হয়েছিল।)


4
আহ, আমার প্রথম প্রোগ্রামিং ভাষা। নস্টালজিয়ার জন্য ধন্যবাদ, হাহা।
অ্যালেক্স প্রিচার্ড

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

1
আপনি যদি চারপাশের জিনিসগুলি স্থানান্তর করেন তবে cos(piAnsঅন্য বাইট সংরক্ষণের জন্য কৌশলটি ব্যবহার করতে পারেন ।
lirtosiast

9

পাইথন 2, 115 বাইট

def f(L,n=0,O=()):
 for c in L:n-=c>"(";O+=" "*n+c,;n+=c<")"
 for r in map(None,*O):print"".join(c or" "for c in r)

কল করুন f("((()())()(()(())()))"), এবং আউটপুট STDOUT এ।

ব্যাখ্যা

আমরা দিয়ে শুরু n = 0। ইনপুট লাইনে প্রতিটি চরের জন্য:

  • (চরটি যদি হয় nতবে আমরা স্পেসগুলি আগেই ব্যয় করি ইনক্রিমেন্টn
  • গৃহস্থালির কাজ হয়, তাহলে ), আমরা হ্রাস nতারপর পূর্বে লিখুন nস্পেস

এরপরে ফলাফলটি জিপ করে প্রিন্ট করা হয়। লক্ষণীয় যে পাইথনের zipজিপগুলি সবচেয়ে সংক্ষিপ্ত উপাদানটির দৈর্ঘ্যের সাথে মেলে

>>> zip([1, 2], [3, 4], [5, 6, 7])
[(1, 3, 5), (2, 4, 6)]

সাধারণত তারা দীর্ঘতম উপাদানটির দৈর্ঘ্যে প্যাড করতে চাইলে itertools.zip_longest( izip_longest) ব্যবহার করতে zipপারে ।

>>> import itertools
>>> list(itertools.izip_longest([1, 2], [3, 4], [5, 6, 7]))
[(1, 3, 5), (2, 4, 6), (None, None, 7)]

কিন্তু পাইথন 2 এ, এই আচরণটি ম্যাপিংয়ের মাধ্যমে অনুকরণ করা যায় None:

>>> map(None, [1, 2], [3, 4], [5, 6, 7])
[(1, 3, 5), (2, 4, 6), (None, None, 7)]

পাইথন 3, 115 বাইট

L,d,*O=input(),0
for i,c in enumerate(L):b=c>"(";O+="",;O[d-b]=O[d-b].ljust(i)+c;d-=b*2-1
for l in O:l and print(l)

কোনও জিপিং নয়, কেবল সঠিকভাবে প্যাডিং সহ ljust। এই এক কিছু গল্ফ সম্ভাবনা আছে বলে মনে হচ্ছে।


8

আর, 151 127 টি অক্ষর

S=strsplit(scan(,""),"")[[1]];C=cumsum;D=c(C(S=="("),0)-c(0,C(S==")"));for(j in 1:max(D)){X=S;X[D!=j]=' ';cat(X,sep='',fill=T)}

ইনডেন্ট এবং নিউলাইন সহ:

S=strsplit(scan(,""),"")[[1]]
C=cumsum
D=c(C(S=="("),0)-c(0,C(S==")"))
for(j in 1:max(D)){
    X=S
    X[D!=j]=' '
    cat(X,sep='',fill=T)
    }

ব্যবহার:

> S=strsplit(scan(,""),"")[[1]];C=cumsum;D=c(C(S=="("),0)-c(0,C(S==")"));for(j in 1:max(D)){X=S;X[D!=j]=' ';cat(X,sep='',fill=T)}
1: ()(())((()))(())()
2: 
Read 1 item
()(  )(    )(  )()
   ()  (  )  ()   
        ()        
> S=strsplit(scan(,""),"")[[1]];C=cumsum;D=c(C(S=="("),0)-c(0,C(S==")"));for(j in 1:max(D)){X=S;X[D!=j]=' ';cat(X,sep='',fill=T)}
1: ((()())()(()(())()))
2: 
Read 1 item
(                  )
 (    )()(        ) 
  ()()    ()(  )()  
             ()     

এটি স্ট্রিন হিসাবে স্ট্রিং পড়ে, একে একক অক্ষরের ভেক্টর হিসাবে বিভক্ত করে, (এবং এর যোগফলের যোগফলকে গণনা করে) পূর্বেরটিকে পরবর্তী (একটি ল্যাগ সহ) এর সাথে প্রতিটি স্তরের "স্তর" গণনা করে subst এরপরে প্রতিটি স্তরের জন্য প্রাসঙ্গিক বন্ধনী বা কোনও স্থান হ'ল স্টডআউট প্রিন্ট করে।

আমাকে এটি যথেষ্ট পরিমাণে সংক্ষিপ্ত করতে সাহায্য করার জন্য @ মিকিটিকে ধন্যবাদ!


2
+1 দুর্দান্ত এবং মার্জিত সমাধান। আপনি প্রতিস্থাপন 6 সংরক্ষণ করতে পারবেন for(i in n)cat(ifelse(D[i]-j," ",S[i]));cat("\n")সঙ্গে X=S;X[which(D!=j)]=' ';cat(X,sep='',fill=T)। তারপরে nসত্যই প্রয়োজন হয় না, তবে আপনার চামসাম অংশটি কিছুটা পরিবর্তন করতে হবে। D=c(C(S=="("),0)-c(0,C(S==")"));এটিকে 135 এ নামিয়ে আনা হচ্ছে
মিকিটি

@ মিকিটি ওয়াও ধন্যবাদ! ভেবে দেখিনি। whichযদিও এখানে D!=jইতিমধ্যে প্রয়োজনীয় নয় ( ইতিমধ্যে বুলিয়ানগুলির ভেক্টর যা সূচককে অনুমতি দেয়)। আমি যুক্তি জানেন না fillজন্য cat, যে একটি ছিমছাম কৌতুক আছে! একটি চমকপ্রদ 24 অক্ষর দ্বারা আমাকে এটি সংক্ষিপ্ত করার জন্য ধন্যবাদ !!
প্ল্যানাপাস

8

সি, 58 53 52 51 49 বাইট

কার্সার অবস্থানটি সরানোর জন্য এএনএসআই এস্কেপ সিকোয়েন্স ব্যবহার করে।

f(char*s){while(*s)printf(*s++&1?"\e[A)":"(\v");}

জিসিসি বা অন্য কোনও সংকলক সমর্থন করে যা সমর্থন \eকরে না তবে এটি \x1Bমোট 2 অতিরিক্ত বাইটের জন্য প্রতিস্থাপিত হতে পারে । \e[Aকার্সারটিকে এক সারিতে উপরে \e[Bসরানো হয় এবং কার্সারটিকে একটি সারি এর নীচে সরানো হয়। এটা ব্যবহার করা প্রয়োজনীয় নয় \e[Bএক সারি নিচে সরাতে যেমন হওয়া ASCII উল্লম্ব ট্যাব অক্ষর ব্যবহার করতে দুই বাইট খাটো 0xBবা \v

ইনপুট স্ট্রিংটি প্রশ্ন থেকে, ধরে নেওয়া হয়েছে যে কেবল (ভারসাম্যপূর্ণ) প্রথম বন্ধনীর সমন্বয়ে গঠিত, সুতরাং চরিত্রটির সাম্যতা পরীক্ষা করে, এর সাথে এবং এর &1মধ্যে পার্থক্য করার জন্য যথেষ্ট ।()


7

পিপ, 53 বাইট

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

z:{aEQ'(?++v--v+1}MaW(o:{z@++v=i?as}Ma)RMs{Pov:-1++i}

কমান্ড-লাইন আর্গুমেন্ট হিসাবে প্রথম বন্ধনীগুলির স্ট্রিং আশা করে।

"অবহেলিত" সংস্করণ:

z:{
   a EQ '( ?
    ++v
    --v+1
  } M a
W (o:{
      z @ ++v = i ?
       a
       s
     } M a
  ) RM s
{
 P o
 v:-1
 ++i
}

ব্যাখ্যা:

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

প্রোগ্রামটি প্রথমে zইনপুট স্ট্রিংটিতে কোনও ফাংশন ম্যাপিংয়ের মাধ্যমে গভীরতার একটি তালিকা তৈরি করে (এতে সংরক্ষণ করে ) a। গ্লোবাল ভেরিয়েবল vবর্তমান স্তরটি অনুসরণ করে। (পিপে ভেরিয়েবলগুলি a-gহ'ল ফাংশন-লোকাল ভেরিয়েবল, তবেh-z বৈশ্বিক। vএটি কার্যকর হয় কারণ এটি -1-এ পূর্বরূপীকরণ করা হয়েছে))

এরপরে, আমরা Wপ্রতিটি লাইন উত্পন্ন এবং মুদ্রণ করতে একটি হিল লুপ ব্যবহার করি , যতক্ষণ না উত্পন্ন লাইনটি সমস্ত স্পেস নিয়ে গঠিত। vএখন কলাম এবং iসারি জন্য ব্যবহৃত হয় । {z@++v=i?as}ফাংশন, বারবার আসল ইনপুটের স্ট্রিং ম্যাপ, পরীক্ষার কিনা বর্তমান লাইন iলাইন মিলে যায় বর্তমান প্রথম বন্ধনী (সঞ্চিত হিসাবে হতে অনুমিত হয় zতালিকা)। যদি তা হয় তবে প্রথম বন্ধনী ব্যবহার করুন ( a); যদি না হয় তবে ব্যবহার করুন s(স্পেসে পূর্বনির্ধারিত)। শেষ ফলাফলটি হ'ল প্রতিটি পুনরাবৃত্তির উপর, oআউটপুটটির পরবর্তী লাইনের সমতুল্য অক্ষরের একটি তালিকা নির্ধারিত হয়।

আমাদের লুপিং চালিয়ে যাওয়া উচিত কিনা তা পরীক্ষা করতে, আমরা খালি oসমস্ত ফাঁকা স্থান RMখালি আছে কিনা তা পরীক্ষা করে দেখি । যদি তা না হয় তবে এটি মুদ্রণ করুন (যা ডিফল্টরূপে সিজোমের মতো সবকিছুকে একত্রিত করে), কলাম নম্বরটি -1 এ পুনরায় সেট করুন এবং সারি সংখ্যা বৃদ্ধি করুন।

(মজার ঘটনা: আমার প্রথমে একটি 51-বাইট সমাধান ছিল ... যা কাজ করে নি কারণ এটি দোভাষীটিতে একটি বাগ তৈরি করেছিল।)


7

পাইথ, 31 বাইট

VzJs.e?YqN-/<zk\(/<zhk\)dzI-JdJ

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

-/<zk\(/<zhk\): বর্তমানের চরিত্রের অবস্থানের জন্য উপযুক্ত স্তরটি সন্ধান করে।

?YqN-/<zk\(/<zhk\)d: একটি স্থান যদি উপযুক্ত স্তরটি বর্তমান স্তর নয়, অন্যথায় বর্তমান অক্ষর নয়।

Js.e?YqN-/<zk\(/<zhk\)dz: STRING জেনারেট করুন, এটা সংরক্ষণ J

I-JdJ: যদি Jসমস্ত স্থান না থাকে তবে এটি মুদ্রণ করুন।

Vz: লুপ zবার।


6

জিএনইউ বাশ + কোর্টিলস + ইনডেন্ট, 135

eval paste "`tr '()' {}|indent -nut -i1 -nbap|sed 's/.*/<(fold -1<<<"&")/'|tr '
' \ `"|expand -t2|sed 'y/{}/()/;s/\(.\) /\1/g;s/ \+$//'

STDIN / STDOUT এর মাধ্যমে ইনপুট / আউটপুট:

$ ./telescopic.sh <<< "(()(()())()((())))(())"
(                )(  )
 ()(    )()(    )  ()
    ()()    (  )
             ()
$ 

indentভারী উত্তোলন বেশিরভাগ ক্ষেত্রে করে তবে প্যারেন্সের পরিবর্তে ব্রেস দিয়ে কাজ করা দরকার। বিশ্রাম নেই এই উত্তরটি পরিবর্তন আউটপুট স্থানান্তর করা হয় indent


5

পাইথন 2, 92

def f(s,i=0,z=''):
 for x in s:b=x>'(';z+=[' ',x][i==b];i-=2*b-1
 if'('in z:print z;f(s,i-1)

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

তারপরে, প্রিন্ট করে এবং পরের দিকে পুনরাবৃত্তি করে i বর্তমান লাইনটি সমস্ত ফাঁকা স্থান না থাকলে । নোট করুন যেহেতু পেরেনগুলি ভারসাম্যযুক্ত, তাই iলুপের পরে শুরুতে একই।

পাইথন 3 এর জন্য অক্ষর ছাড়া একই হবে print(z)


5

প্রতারণা :( রেটিনা + টেক্স, এন বাইট প্রতারণা :(

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

\(
({
\)
})
\{\(
_{(

প্রতিটি লাইন আলাদা ফাইলে হওয়া উচিত তবে আপনি এটি ব্যবহার করে এটি পরীক্ষা করতে পারেন Retina -e "\(" -e "({" -e "\)" -e "})" -e "\{\(" -e "_{(" (বা সমতুল্য সেড কমান্ড sed -e "s/(/({/g;s/)/})/g;s/{(/_{(/g") । ইনপুটটি এসটিডিনের মধ্য দিয়ে যায়।

এটি বন্ধনীগুলির মধ্যে প্রতিটি জুটির লিখিত সামগ্রীগুলি বন্ধন করে এবং তারপরে সমস্ত আইটেম সাবস্ক্রিপশন করে কাজ করে।

আউটপুট

(((())))
(_{(_{(_{({})})})})

()(())((()))(())()
({})(_{({})})(_{(_{({})})})(_{({})})({})

((()())()(()(())()))
(_{(_{({})({})})({})(_{({})(_{({})})({})})})

টেক্স আউটপুট


1
আমি চাটুকার হয়েছি যে আপনি রেটিনা ব্যবহার করেছেন, এবং এটি বাক্সের বাইরে-ভাবনা খুব ভাল তবে আউটপুটটি দেখতে কেমন হবে তা ঠিক তেমনটি নয়। ;) বিশেষত এটি বিকল্প গঠনের লঙ্ঘন করে "এটিকে দেখার অন্য একটি উপায় হ'ল অনুভূমিক অবস্থানটি বজায় রেখে গভীরতা n এর প্রথম বন্ধনীগুলি লাইন এন-তে স্থানান্তরিত হয়" " আমি খুব যদিও একটি বিশুদ্ধ, নিয়ম-অনুবর্তী অক্ষিপট সমাধান দ্বারা প্রভাবিত করতে থাকতে আর পারে এটির জন্য একটি খয়রাত হাত। ;)
মার্টিন এন্ডার

In total the lines must not be longer than twice the length of the input string। লাইন 2 থেকে (\,{4 এবং লাইন পরিবর্তন করার }\,)অর্থ আউটপুট এটি ফিট করে (যদিও উল্লম্ব গভীরতা এখনও ভুল: ()
ব্যবহারকারী 22723

ঠিক আছে, আমি নিয়ম-
সম্মতিযুক্ত

1
সুন্দর কাজ. আমি অনুমান করি এর অর্থ আপনি এখনই প্রতারণামূলক উত্তর মুছতে পারেন। ;)
মার্টিন ইন্ডার

5

জাভা, 232 226 224 222 বাইট

গল্ফ সংস্করণ:

int i,j,k,l,m,a[];void f(String s){a=new int[s.length()];j=a.length;for(k=0;k<j;){a[k]=s.charAt(k++)<41?i++:--i;m=m<i?i:m;}for(k=0;k<m;k++)for(l=0;l<j;)System.out.print(k==a[l++]?i++%2<1?'(':l==j?")\n":')':l==j?'\n':' ');}

দীর্ঘ সংস্করণ:

int i, j, k, l, m, a[];
void f(String s) {
    a = new int[s.length()];
    j = a.length;
    for (k = 0; k < j;) {
        a[k] = s.charAt(k++) < 41 ? i++ : --i;
        m = m < i ? i : m;
    }
    for (k = 0; k < m; k++)
        for (l = 0; l < j;)
            System.out.print(k == a[l++] ? (i++ % 2 < 1 ? '(' : (l == j ? ")\n" : ')')) : (l == j ? '\n':' '));
}

ইনপুট স্ট্রিংটি প্রথমে বিশ্লেষণ করা হয়, কাউন্টার যুক্ত / বিয়োগ করতে "(" এবং ")" সন্ধান করে এবং আরও গভীরতমের দিকে কত গভীর যায় তার উপর নজর রাখার সময় নির্ধারণ করা হয় যে বন্ধনীর স্তরটি কত নিচে যেতে হবে তা নির্ধারণ করে its তারপরে অ্যারের বিশ্লেষণ করা হয়; কম মান সহ প্রথম বন্ধনী প্রথম মুদ্রণ করা হয়, এবং সর্বাধিক পৌঁছানো অবধি লাইনে মুদ্রণ অবিরত থাকবে।

আমি সম্ভবত আরও পরে এটি গল্ফ করার উপায় খুঁজে পাব।


5

জাভাস্ক্রিপ্ট / ES6, 97 টি অক্ষর

f=s=>{for(n in s){m=o=d='';for(c of s)o+=n==(c<')'?d++:--d)?c:' ',m=m<d?d:m;n<m&&console.log(o)}}

ব্যবহার

f("(()(()())()((())))(())")

ব্যাখ্যা

fn=str=>{                          // accepts string of parenthesis
  for(line in str){                // repeat process n times where n = str.length
    max=output=depth='';           // max: max depth, output: what to print, depth: current depth
    for(char of str)               // iterate over chars of str
      output+=
        line==(char<')'?depth++:--depth)? // update depth, if line is equal to current depth
        char:' ',                  // append either '(', ')', or ' '
        max=max<depth?depth:max;   // update max depth
    line<max&&console.log(output)  // print if current line is less than max depth
  }
}

পরিবর্তে n<m?console.log(o):0, আপনি ব্যবহার করতে পারেন n<m&&console.log(o)যা 1 বাইট সংরক্ষণ করে।
ইসমাইল মিগুয়েল

4

সিজেম, 43 41 36 বাইট

খুব গল্ফ হয় না (আমার মনে হয়), তবে এখানে আমার প্রথম চেষ্টা করা হয়েছে:

l:L,{)L<)_')=@~zS*\+}%_$0=,f{Se]}zN*

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

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

l:L,{)L<)_')=@~zS*\+}%_$0=,f{Se]}zN*
l:L,{                    }%                "Store input line in L and iterate over [0,L)";
     )L<                                   "substr(L, 0, iterator + 1)";
        )                                  "Slice off the last character to stack";
         _')=                              "Put 0 on stack if the sliced character is (,
                                            else 1 if sliced character is )";
             @~                            "bring forth the remaining
                                            brackets after slicing and evaluate them";
               zS*                         "Stack has negative depth number, take absolute
                                            value and get that many spaces";
                  \+                       "Prepend to the sliced character";
                      _$0=,                "Get the maximum depth of brackets";
                           f{Se]}          "Pad enough spaces after each string to match
                                            the length of each part";
                                 zN*       "Transpose and join with new lines";

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


4

অক্টাভা, 85 টি চর

function r=p(s)i=j=0;for b=s k=b==40;k&&++j;t(j,++i)=9-k;k||--j;r=char(t+32);end;end

এটি নির্বোধের পদ্ধতির একটি অপ্টিমাইজেশন যা মাতলাব এবং অষ্টাভের পক্ষে আসলেই বেশ প্রাকৃতিক:

function r=p(s)
i=j=1;
for b=s
 if b=='(' t(++j,i++)='(' else t(j--,i++)=')' end; end; t(~t)=' '; r=char(t);
end;

টেবিলটি t এখনও উপস্থিত থাকতে পারে না এবং আমরা এখনই যে কোনও উপাদানকে নির্ধারিত করতে পারি এবং এটি এই উপাদানটির জন্য সবচেয়ে ছোট আকারের আকার পরিবর্তন করে যা এটি যথেষ্ট সুবিধাজনক।


4

পার্ল, 91 89 88 84 80 79 বাইট

$t=<>;{$_=$t;s/\((?{$l++})|.(?{--$l})/$^R==$c?$&:$"/ge;print,++$c,redo if/\S/}
  • $ t ইনপুট স্ট্রিং।
  • $ c হ'ল গভীরতা যা আমরা বর্তমান লাইনে মুদ্রণ করতে চাই।
  • l একটি পেরেনের মুখোমুখি হওয়ার পরে আমরা যে গভীরতায় রয়েছি is
  • রেগেক্স এমবেডেড কোড ব্লকগুলিতে আপডেট করা হয়েছে ।
  • $ ^ আর সবচেয়ে সাম্প্রতিক কোড ব্লকের ফলাফল।

4

হাস্কেল, 154 বাইট

f h('(':s)=h:f(h+1)s;f h(')':s)=(h-1):f(h-1)s;f _ _=[]
main=interact$ \s->unlines[[if i==h then c else ' '|(c,i)<-zip s l]|let l=f 0 s,h<-[0..maximum l]]

অন্যান্য হাস্কেল সমাধান হিসাবে একই ধারণা, কিন্তু কিছুটা সংক্ষিপ্ত। - ব্যবহার:

echo  '(((())())(()))' | runghc Golf.hs

3

জে, 46

অন্যান্য 'গল্ফিং ল্যাঙ্গুয়েজ'-এর মতো দুর্দান্ত নয়, তবে আমার প্রতিরক্ষায়: স্ট্রিং সহ জে ভয়ানক।

[:|:(((,~(' '#~]))"0)(0,2%~[:+/\2+/\1-'(('i.]))~

কোনও ফাংশনের জন্য স্ট্রিংটিকে ইনপুট হিসাবে নেয়। জেতে এটি করার আরও ভাল উপায়ও আছে।

ব্যবহার:

   f=:[:|:(((,~(' '#~]))"0)(0,2%~[:+/\2+/\1-'(('i.]))~
   f '(()(()())()((())))(())'
(                )(  )
 ()(    )()(    )  () 
    ()()    (  )      
             ()       


3
ব্যক্তিগতভাবে, আমি মনে করি যে স্ট্রিংয়ের জন্য জে পুরোপুরি উপযুক্ত। আপনাকে কেবল অ্যারে দিয়ে ভাবতে হবে।
FUZxxl

3

রুবি, 119 115 114

->s{r=[""]*s.size
d=0
s.chars.map{|l|r.map!{|s|s+" "}
b=l>"("?1:0
d-=b
r[d][-1]=l
d+=1-b}.max.times{|i|puts r[i]}}

ব্যাখ্যা:

->s{r=[""]*s.size  # Take an array of strings big enough
d=0                # This will contain the current depth
s.chars.map{|l|r.map!{|s|s+" "}  # Add a new space to every array
b=l>"("?1:0       # Inc/Dec value of the depth
d-=b               # Decrement depth if we are at a closing paren
r[d][-1]=l         # Set the corresponding space to the actual open/close paren
d+=1-b             # Increment the depth if we are at a opening paren
}.max.times{|i|puts r[i]}}  # Print only the lines up to the max depth

3

জাভা, 233 214 বাইট

void f(String s){int p,x,d,l=s.length();char c,m[]=new char[l*l];java.util.Arrays.fill(m,' ');p=x=0;while(x<l){d=(c=s.charAt(x))==40?p++:--p;m[d*l+x++]=c;}for(x=0;x<l*l;x++)System.out.print((x%l==0?"\n":"")+m[x]);}

ইন্ডেন্টযুক্ত:

void f(String s){
    int p, x, d, l = s.length();
    char c, m[] = new char[l * l];
    java.util.Arrays.fill(m, ' ');
    p = x = 0;
    while (x < l){
        d = (c = s.charAt(x)) == 40
                ? p++
                : --p;
        m[d * l + x++] = c;
    }
    for (x = 0; x < l * l; x++)
        System.out.print((x % l == 0 ? "\n" : "") + m[x]);
}

আমার ধারণা, চূড়ান্ত লুপটি ছোট করা যেতে পারে তবে আমি এটি পাঠকের অনুশীলন হিসাবে ছেড়ে দেব। ;-)


পুরাতন, 233 বাইট উত্তর:

void f(String s){int y=s.length(),x=0;char[][]m=new char[y][y];for(char[]q:m)java.util.Arrays.fill(q,' ');y=0;for(char c:s.toCharArray())if(c=='(')m[y++][x++]=c;else m[--y][x++]=c;for(char[]q:m)System.out.println(String.valueOf(q));}

ইন্ডেন্টযুক্ত:

static void f(String s) {
    int y = s.length(), x = 0;
    char[][] m = new char[y][y];
    for(char[] q : m)
        java.util.Arrays.fill(q, ' ');
    y = 0;
    for(char c : s.toCharArray())
        if(c == '(')
            m[y++][x++] = c;
        else
            m[--y][x++] = c;
    for(char[] q : m)
        System.out.println(String.valueOf(q));
}

আমি জানি এটি এক বছরেরও বেশি সময় কেটে গেছে, তবে "আমি অনুমান করি চূড়ান্ত লুপটি সংক্ষিপ্ত করা যেতে পারে তবে আমি এটি পাঠকের কাছে অনুশীলন হিসাবে ছেড়ে দেব। ;-)"; তুমি সত্যই বলেছ এটা তোলে থেকে পরিবর্তন করা যাবে for(x=0;x<l*l;x++)System.out.print((x%l==0?"\n":"")+m[x]);থেকে for(x=0;x<l*l;)System.out.print((x%l==0?"\n":"")+m[x++]);-1 বাইট জন্য। এছাড়াও, আপনি সরানোর পরিবর্তে আরও দুটি বাইট সংরক্ষণ করতে পারেন p=x=0এবং কেবল int p=0,x=0,পরিবর্তে ক্ষেত্রগুলির সূচনাতে ব্যবহার করতে পারেন । মোট এটি 211 বাইট হয়ে যায় ।
কেভিন ক্রুইজসেন

3

সি #, 195 বাইট

প্রথমে গল্ফ এ চেষ্টা করুন - চিৎকার করে বলি যদি আমি কিছু ভুল করি।

বিকল্প সি # সংস্করণ সেটকার্সারপজিশন ব্যবহার করে এবং বাম থেকে ডানদিকে কাজ করে ইনপুটটিকে কমান্ডলাইন আর্গ হিসাবে গ্রহণ করে।

using System;class P{static void Main(string[] a){Action<int,int>p=Console.SetCursorPosition;int r=0,c=0;foreach(var x in a[0]){r+=x==')'?-1:0;p(c,r);Console.Write(x);r+=x=='('?1:0;p(c,r);c++;}}}

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

using System;
class P
{
    static void Main(string[] a)
    {
        Action<int, int> p = Console.SetCursorPosition;
        int r = 0, c = 0;
        foreach (var x in a[0])
        {            
            r += x == ')' ? -1 : 0;
            p(c, r);
            Console.Write(x);
            r += x == '(' ? 1 : 0;
            p(c, r);
            c++;
        }
    }
}

3

ব্যাচ, 356 335 বাইট

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

@echo off
setlocal enabledelayedexpansion
set p=%1
set p=%p:(="(",%
set p=%p:)=")",%
set c=0
for %%a in (%p%)do (if ")"==%%a set/ac-=1
set d=!d!,!c!%%~a
if "("==%%a set/ac+=1&if !c! GTR !m! set m=!c!)
set/am-=1
for /l %%a in (0,1,!m!)do (for %%b in (!d!)do (set t=%%b
if "%%a"=="!t:~0,-1!" (cd|set/p=!t:~-1!)else (cd|set/p=. ))
echo.)

U+0008বিন্দু (লাইন 12, কলাম 57) এর পরে দ্বিতীয় থেকে শেষ লাইনে একটি ব্যাকস্পেস অক্ষর রয়েছে ( )। এটি এখানে পোস্ট করা কোডে দৃশ্যমান নয় তবে বাইট গণনায় অন্তর্ভুক্ত রয়েছে।


ব্যাচটিতে অন্য কেউ আসলে একটি উত্তর জমা দিচ্ছে - দুর্দান্ত এক +1।
চাচাবিহীন

3

ব্যাচ, 424 বাইট

@echo off
setLocal enableDelayedExpansion
set s=%1
set a=1
:c
if defined s (set/ac+=1
set "z="
if "%s:~0,1%"=="(" (set "1=(")else (set/aa-=1
set "1=)")
for %%a in (!a!)do for /f usebackq %%b in (`powershell "'!l%%a!'".Length`)do (set/ay=!c!-%%b
for /l %%a in (1,1,!y!)do set z= !z!
set "l%%a=!l%%a!!z!!1!")
if "%s:~0,1%"=="(" set/aa+=1
if !a! GTR !l! set/al=!a!-1
set "s=%s:~1%"
goto c)
for /l %%a in (1,1,!l!)do echo !l%%a!

আন golfed:

@echo off
setLocal enableDelayedExpansion

set s=%1
set a=1
set c=0
set l=0

:c
if defined s (
    set /a c+=1
    set "z="
    if "%s:~0,1%"=="(" (
        set "1=("
    ) else (
        set /a a-=1
        set "1=)"
    )
    for %%a in (!a!) do for /f usebackq %%b in (`powershell "'!l%%a!'".Length`) do (
        set /a y=!c!-%%b
        for /l %%a in (1,1,!y!) do set z= !z!
        set "l%%a=!l%%a!!z!!1!"
    )
    if "%s:~0,1%"=="(" set /a a+=1
    if !a! GTR !l! set /a l=!a!-1
    set "s=%s:~1%"
    goto c
)

for /l %%a in (1,1,!l!) do echo !l%%a!

উদাহরণ:

h:\>par.bat (((())())(()))
 (            )
  (      )(  )
   (  )()  ()
    ()

3

সি, 118 117 বাইট

সি তে অন্য উত্তর, তবে আমার খাটো কম।

c;d;main(m,v)int**v;{while(d++<m){char*p=v[1];while(*p)c+=*p==40,putchar(c-d?*p:32),m=c>m?c:m,c-=*p++==41;puts("");}}

অবরুদ্ধ সংস্করণ:

c; /* current depth */
d; /* depth to print in current row */
main(m,v)int**v;{
    while(d++<m) {
        char*p=v[1];
        while(*p){
            c+=*p==40;           /* 40 = '(' */
            putchar(c-d?*p:32); /* 32 = ' ' (space) */
            m=c>m?c:m;           /* search maximum depth */
            c-=*p++==41;         /* 41 = ')' */
        }
        puts("");
    }
}

এবং এটি কাজ করে!

% ./telescope '()(())((()))(())()'
()(  )(    )(  )()
   ()  (  )  ()
        ()
% ./telescope '((()())()(()(())()))'
(                  )
 (    )()(        )
  ()()    ()(  )()
             ()

1
বেশ একটি মার্জিত সমাধান, তবে এর putchar(c-d?32:*p)চেয়ে একটি চরিত্র ছোট putchar(c==d?*p:32)
pawel.boczarski

2

হাস্কেল, 227 বাইট

n _ []=[]
n h ('(':r)=('(',h):n(h+1)r
n d (')':r)=let h=d-1 in(')',h):n h r
m n []=n
m n ((_,h):r)=m(max h n)r
p s=let v=n 0 s;h=m 0 v;in map(\d->map(\(b,l)->if l==d then b else ' ')v)[0..h]
main=fmap p getLine>>=mapM_ putStrLn

1
আপনি অপারেটরগুলির সাথে কয়েকটি স্পেস সংরক্ষণ করতে পারেন: এর n#[]পরিবর্তে m n []
ফ্রাঙ্কি


2

লেক্স, 94 বাইট

লিনাক্স কনসোল কোডগুলিতে নির্ভর করে। জিসিসির সাহায্যে আপনি উভয় দৃষ্টান্তকে \33প্রকৃত পালানোর অক্ষর দ্বারা প্রতিস্থাপন করে চারটি বাইট আউট করতে পারেন ।

%%
 int p[2]={0};
\( printf("(\33D");++p[!*p];
\) printf("\33M)");--*p;
\n while(p[1]--)ECHO;

সংকলন এবং চালানোর জন্য:

$ flex -o telescopic.c telescopic.l
$ gcc -o telecopic telescopic.c -lfl
$ ./telescopic
(()(()())()((())))(())
(                )(  )
 ()(    )()(    )  ()
    ()()    (  )
             ()
--- type ctrl-D ---
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.