টপোগ্রাফিক স্ট্রিংস


23

এখানে কয়েকটি উদাহরণ ইনপুট দেওয়া আছে, তাই সমস্যাটি কী তা আমি ব্যাখ্যা করতে পারি:

((1 2)(3 (4 5) moo)) (i (lik(cherries)e (woohoo)))

পাঠ্যটির এই লাইনটিকে কিছু পর্বতের টপোগ্রাফিক মানচিত্র হিসাবে ভাবেন। প্রথম বন্ধনীগুলির প্রতিটি সেট উচ্চতার এক ইউনিট চিত্রিত করে।

যদি আমরা এটিকে পাশ থেকে "দেখি", যাতে আমরা পর্বতগুলি উল্লম্বভাবে দেখতে পাই, আমরা দেখতে পাব:

          4 5                cherries    woohoo  
  1 2  3       moo       lik          e
                      i

এই শীর্ষস্থানীয় মানচিত্রগুলির মধ্যে একটি দেওয়া, মানচিত্রটিকে আউটপুট করুন তবে উপরের আউটপুটটির মতো একটি উল্লম্ব স্কেল। পরবর্তী আইটেমের অক্ষরের সংখ্যা সহ মানচিত্রে বিভিন্ন আইটেমগুলি আলাদা করুন। উদাহরণস্বরূপ, সেখানে মধ্যে আউটপুটে 4 শূণ্যস্থান দ্বারা mooএবং i। একইভাবে, তার মাঝে ইনপুট 4 অক্ষর mooএবং i

কোডগুলি যা নূন্যতম পরিমাণে এটি জিততে পারে।


এটা ধরে নেওয়া কি নিরাপদ যে উচ্চতা সর্বদা ইতিবাচক থাকবে? উদাহরণস্বরূপ, ((1 2))))))))))3নেতিবাচক উচ্চতা নিষিদ্ধ থাকলে ইনপুটটি অবৈধ হওয়া উচিত।
ক্রিশ্চিয়ান লুপাস্কু

@ w0lf: হ্যাঁ, প্রথম বন্ধনী সর্বদা মিলবে।
beary605

উত্তর:


10

জে, 87 79 72 70 67 57 56 টি অক্ষর

'( ) 'charsub|.|:(+/\@('('&=-')'&=)(],~' '$~[)"0])1!:1[1

কীবোর্ড থেকে ইনপুট নেয়। উদাহরণ:

   '( ) 'charsub|.|:(+/\@('('&=-')'&=)(],~' '$~[)"0])1!:1[1
((1 2)(3 (4 5) moo)) (i (lik(cherries)e (woohoo)))
          4 5                cherries    woohoo
  1 2  3       moo       lik          e
                      i

ব্যাখ্যা:

এই ব্যাখ্যাটি আমার প্রোগ্রামের প্রথম সংস্করণের উপর ভিত্তি করে:

|.|:('( ) 'charsub x)((' '$~{.@]),[{~{:@])"1(('('&([:+/=)-')'&([:+/=))\,.i.@#)x=.1!:1[1

x=.1!:1[1কীবোর্ড থেকে ইনপুট নিন এবং এটি xপরে রাখুন

(('('&([:+/=)-')'&([:+/=))\,.i.@#)ক্রিয়াটির ফলাফলের সাথে স্ট্রিং ( i.@#) এবং সেলাই ( ,.) এ সমস্ত অশ্লীলতার একটি তালিকা তৈরি করে (('('&([:+/=)-')'&([:+/=))\

(('('&([:+/=)-')'&([:+/=))\এই ক্রিয়া সব স্ট্রিংয়ের উপসর্গ প্রয়োগ করা হয় (তাই ইনপুটের helloএটি প্রয়োগ হবে h, he, hel, hell, এবং hello। এটা একটা হয় কাঁটাচামচ , যা খোলা বন্ধনী সংখ্যা গণনা ('('&([:+/=)এবং তারপর ঘনিষ্ঠ বন্ধনী সংখ্যা subtracts ')'&([:+/=)। এটি আমার তালিকা দেয় স্ট্রিং এবং লেভেলের সেই সূচকের অক্ষরটি আউটপুটে থাকা উচিত simple সাধারণ ইনপুটটিতে এটি আমাকে নিম্নলিখিত দেয়:

   (('('&([:+/=)-')'&([:+/=))\,.i.@#)x=.1!:1[1
(one(two(three)))
1  0
1  1
1  2
1  3
2  4
2  5
2  6
2  7
3  8
3  9
3 10
3 11
3 12
3 13
2 14
1 15
0 16

((' '$~{.@]),[{~{:@])"1এটি এমন একটি ক্রিয়া যা আমার সবেমাত্র তৈরি করা তালিকা এবং আউটপুটও গ্রহণ করে ('( ) 'charsub x)(যা কেবলমাত্র একটি স্ট্রিং প্রতিস্থাপনের জন্য সমস্ত বন্ধনীকে ফাঁকা স্থান সহ প্রতিস্থাপন করে x)। এটি তালিকার প্রতিটি আইটেমের লেজ নেয় {:@]এবং অক্ষরটি পেতে স্ট্রিংয়ের সূচক হিসাবে এটি ব্যবহার করে [{~{:@]। তারপরে এটি ,তালিকার প্রতিটি আইটেমের মাথা দ্বারা নির্দেশিত স্থানগুলির সংখ্যা সহ এটি উপসর্গ করে (' '$~{.@])। পূর্ববর্তী উদাহরণে এটি আমাকে দেয়:

   ('( ) 'charsub x)((' '$~{.@]),[{~{:@])"1(('('&([:+/=)-')'&([:+/=))\,.i.@#)x=.1!:1[1
(one(two(three)))

 o
 n
 e

  t
  w
  o

   t
   h
   r
   e
   e

আমি তারপরে অ্যারে স্থানান্তর করি |:এবং |.পছন্দসই আউটপুট পেতে এটি বিপরীত করি ।


6

GolfScript 69

0:§;{.'()'?))3%(.§+:§' ':s*\@s\if\n}%n/.{,}%$)\;:μ;{.,μ\-s*\+}%zip n*

অনলাইন ডেমো এখানে

ব্যাখ্যা:

0:§;                # declare the variable §, representing the 
                    # current vertical level and initialize it at 0

{                   # iterate for each char in the string:

    .'()'?))3% (    # add on the stack the amount by which
                    # the current vertical level should be 
                    # adjusted:
                    #   * +1 if the character is '('
                    #   * -1 if the character is ')'
                    #   * 0 otherwise

    .§+:§           # adjust the value of §

    ' ':s*          # add as many spaces as § tells us
                    # and save the space in variable s

    \@s\if\         # return current char, if it's printable,
                    # or a space if it's '(' or ')'

    n               # add a newline char

}%

n/                  # split by newline char; now we have 
                    # an array of strings on the stack.
                    # Each string is a vertical line of the
                    # final output.

.{,}%$)\;:μ;        # Iterate through the strings and find the
                    # maximum length

{
    .,μ\-s*\+       # Add spaces at the end to make all the strings 
                    # the same length
}%

zip                 # Transpose the strings

n*                  # Join the transposed strings by newline characters

@ গ্যারেথ হ্যাঁ, আমরা দুজনই করি :)
ক্রিশ্চিয়ান লুপাস্কু

এটি কীভাবে কাজ করে তা ব্যাখ্যা যুক্ত করার জন্য যত্নশীল?
টিমউই

@ টিমউই আমি একটি উত্তর অন্তর্ভুক্ত করার জন্য আমার উত্তর সম্পাদনা করেছি
ক্রিশ্চিয়ান লুপাস্কু

5

এপিএল (59)

⊖↑{⊃,/T\¨⍨⍵×P=0}¨R∘=¨(⍴T)∘⍴¨⍳⌈/R←1++\P←+/¨1 ¯1∘ר'()'∘=¨T←⍞

আমি ধরে নিয়েছি যে 'বেস' এর পাশাপাশি ব্যবহারযোগ্য হওয়া দরকার। (অর্থাত(a(b))c(d) বৈধ)। এটি প্রয়োজন না হলে দুটি অক্ষর সংরক্ষণ করা যায়।

ব্যাখ্যা:

  • T←⍞: ইনপুট একটি লাইন সঞ্চয়
  • '()'∘=¨T: টিতে প্রতিটি চরিত্রের জন্য দেখুন এটি কোনও উদ্বোধনী বা বন্ধক বন্ধনী কিনা। এটি বুলিয়ানগুলির তালিকার একটি তালিকা দেয়।
  • 1 ¯1∘ר: এই তালিকার প্রতিটি তালিকার দ্বিতীয় উপাদানকে -1 দিয়ে গুণ করুন (সুতরাং একটি খোলার প্রথম বন্ধনী 1, একটি সমাপ্তি -1 এবং অন্য কোনও অক্ষর 0 হয়)।
  • +/¨: প্রতিটি অভ্যন্তরের তালিকার যোগফল নিন। আমাদের কাছে এখন প্রতিটি চরিত্রের valuey মান রয়েছে।
  • P←: স্টোর পি।
  • R←1++\P: প্রতিটি অক্ষরের উচ্চতা প্রদান করে চলমান মোট পি নিন। প্রতিটি চরিত্রের মধ্যে একটি যুক্ত করুন যাতে প্রথম পংক্তির বাইরে প্রথম বন্ধনীগুলির বাইরে অক্ষরগুলি থাকে।
  • (⍴T)∘⍴¨⍳⌈/R: প্রতিটি সম্ভাব্য ওয়াই-মানের জন্য, কেবলমাত্র সেই মানটি নিয়ে টি পর্যন্ত একটি তালিকা তৈরি করুন। (যেমন 1111 ..., 2222 ...., ইত্যাদি)
  • R∘=¨: এই তালিকার প্রতিটি উপাদানগুলির জন্য, এটি আর এর সমান কিনা তা দেখুন (প্রতিটি স্তরের জন্য, এখন আমাদের কাছে সেই স্তরের উপরে একটি চরিত্র উপস্থিত হওয়া উচিত কিনা সে সম্পর্কিত শূন্য এবং এর তালিকা রয়েছে)।
  • ⍵×P=0: এই তালিকাগুলির প্রত্যেকের জন্য, যদি পি zero স্থানে শূন্য না হয় তবে এটি শূন্যে সেট করুন। এটি একটি শূন্য-অ-ডেল্টা-ওয়াইয়ের সাথে অক্ষরগুলি থেকে মুক্তি পাবে, যাতে প্যারেন্টেসিসগুলি থেকে মুক্তি পাওয়া যায়।
  • ⊃,/T\¨⍨: প্রতিটি গভীরতার জন্য, টি থেকে উপস্থিত হওয়া উচিত এমন অক্ষরগুলি নির্বাচন করুন।
  • ⊖↑: একটি ম্যাট্রিক্স তৈরি করুন এবং এটিকে ডানদিকে রেখে দিন।

আপনি কোন এপিএল বাস্তবায়ন ব্যবহার করছেন? এটা বিনামূল্যে?
FUZxxl

@FUZxxl আমি ডায়ালগ এপিএল ব্যবহার করছি, উইন্ডোজ সংস্করণটি বিনামূল্যে ডাউনলোড করা যায়।
মেরিনাস

5

টিসিএল, 50

puts \33\[9A[string map {( \33\[A ) \33\[B} $argv]

প্রতারক ধরনের, কিন্তু ভাল ..

লাইন পার্থক্য পেতে আমি এসকিআই এস্কেপ সিকোয়েন্স ব্যবহার করি, ^[[Aমানে কার্সারটি 1 লাইন উপরে ^[[Bসরানো, কার্সারটি 1 লাইনটি নিচে নামানো হয়।


5

এপিএল, ৪১ টি চর / বাইট *

{⊖⍉⊃(↑∘''¨-⌿+/¨p∘.=,\⍵),¨⍵/⍨1-2×⍵∊p←'()'}

পরিবেশ ⎕IO←1⎕ML←3পরিবেশ নিয়ে ডায়ালাগে পরীক্ষিত । এটি এমন একটি ফাংশন যা প্রয়োজনীয় ইনপুট নেয় এবং আউটপুট ফেরত দেয়। প্রশ্নের বক্তব্য দেওয়া, আমি বিশ্বাস করি এটি গ্রহণযোগ্য। যদি এটি না হয় তবে এখানে এমন একটি সংস্করণ রয়েছে যা স্টিডিন থেকে পড়ে এবং স্টাডাউটে লেখেন, আরও চারটি বর্ণের জন্য:

⍞←⊖⍉⊃(↑∘''¨-⌿+/¨'()'∘.=,\a),¨a/⍨1-2×'()'∊⍨a←⍞

ব্যাখ্যা :

{                                 p←'()'}  p is the string made of two parentheses
                                ⍵∊ ______  check which characters from ⍵ are parens
                            1-2× ________  -1 for every par., 1 for every other char
                         ⍵/⍨ ____________  replace () with spaces in the orig. string
    (                 ),¨ _______________  append every char to the following items
                   ,\⍵ _____________________  for every prefix of the original string
               p∘.= ________________________  check which chars are '(' and which ')'
            +/¨ ____________________________  sum: compute the number of '(' and ')'
          -⌿ _______________________________  subtract the no. of ')' from that of '('
     ↑∘''¨ _________________________________  generate as many spaces as that number
 ⊖⍉⊃ ____________________________________  make it into a table, transpose and flip

উদাহরণ:

topo '((1 2)(3 (4 5) moo)) (i (lik(cherries)e (woohoo)))'
          4 5                cherries    woohoo   
  1 2  3       moo       lik          e           
                      i                           

 

topo 'a  (  b ( c(d)e ) f  )  g'
            d            
          c   e          
      b           f      
a                       g

*: এপিএল বিভিন্ন লেগ্যাসি সিঙ্গল-বাইট অক্ষরে সংরক্ষণ করা যায় যা এপিএল প্রতীকগুলিকে উপরের 128 বাইটে ম্যাপ করে। অতএব, গল্ফিংয়ের উদ্দেশ্যে, এমন একটি প্রোগ্রাম যা কেবলমাত্র ASCII অক্ষর এবং এপিএল প্রতীক ব্যবহার করে অক্ষর = বাইট হিসাবে স্কোর করা যায়।


আমি এখানে এপিএল চরিত্রটি সেট করছি এবং আমি প্রতীকটি খুঁজে পাচ্ছি না । এটি দেখতে ¨এবং ~চরিত্রগুলির সংমিশ্রণের মতো দেখাচ্ছে ?
গ্যারেথ

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

@ গ্যারেথ গ্রাফিকালি এটি এর সংমিশ্রণ ~এবং ¨যদিও এটি উভয়ের থেকে আলাদা চরিত্র। এটি কমিট নামে পরিচিত একটি অপারেটর । তার dyadic ফর্ম এটা dyadic ফাংশন এটা প্রয়োগ করা হচ্ছে অফ আর্গুমেন্ট ফ্লিপ: (5-2)=(2-⍨5)। একটি পরমাণুসদৃশ্য অপারেটর এটা পরমাণুসদৃশ্য মধ্যে একটি dyadic ফাংশন সক্রিয়, ডান যুক্তি অনুরূপ: (2*2)=(*⍨2)। এটি প্রায়শই বড় অভিব্যক্তির চারপাশে প্রথম বন্ধনী স্থাপন না করে এবং আপনার চোখের চারপাশে ঝাঁপিয়ে পড়ে ডান থেকে বামে ফাংশনগুলির একটি নিরবচ্ছিন্ন স্ট্রিম লিখতে ব্যবহৃত হয়। গল্ফিংয়ে এটি দরকারী কারণ: :) এর 3*⍨1-2তুলনায় একটি চর কম(1-2)*3
টোবিয়া

2
সুতরাং এটি ~জে এর সমতুল্য ।
গ্যারেথ

3

জে, 56 অক্ষর

'( ) 'charsub|.|:((,~#&' ')"0[:+/\1 _1 0{~'()'&i.)1!:1]1

আরেকটি 56-অক্ষর জে সমাধান ... আমি অনুবাদ করে গভীরতা গণনা (⁻1 অনুবাদ করে, এবং )0 মধ্যে 1 এবং সমস্ত অন্যান্য অক্ষরের মধ্যে পুরে, এবং তারপর এই চলমান সমষ্টি তোলার [: +/\ 1 _1 0 {~ '()'&i.। বাকিগুলি বেশিরভাগই @ গ্যারেথের সমাধানের মতো।



2

পাইথন, 130

a=[""]*9
l=8
i=0
for c in raw_input():o=l;l+=c==')';l-=c=='(';a[l]=a[l].ljust(i)+c*(o==l);i+=1
print"\n".join(filter(str.strip,a))

2

রুবি ১.৯ (১২৯)

স্টিডিনের কাছ থেকে পড়ে।

l=0
$><<gets.split('').map{|c|x=[?(]*99;x[l+=c==?(?-1:c==?)?1:0]=c;x}.transpose.map(&:join).*(?\n).tr('()',' ').gsub(/^\s+\n/,'')

3
নিস! আপনি রুবি
হাইলাইটারে

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

@ ডাব্লু0এফএফএফ, আপনি ঠিক বলেছেন। আমি পরিবর্তন //করতে ''যা চরিত্র একই গণনা রাখে এবং হাইলাইটার মধ্যে বাগ এড়াতে।
পল প্রেসিডেজ

2

সি, 132 টি অক্ষর

char*p,b[999];n;
main(m){for(p=gets(memset(b,32,999));*p;++p)*p-41?*p-40?p[n*99]=*p:++n>m?m=n:0:--n;
for(;m;puts(b+m--*99))p[m*99]=0;}

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

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


1

সি, 149 অক্ষর

#define S for(i=0;c=v[1][i++];)h+=a=c-'('?c-')'?0:-1:1,
c,i,h=0,m=0;main(int a,char**v){S m=h>m?h:m;for(;m;m--){S putchar(a||h-m?32:c);putchar(10);}}

উদ্ধৃত আরগ দিয়ে চালান, ইগআউট "((1 2) (3 (4 5) মূ)) (i (লিক (চেরি) ই (ওহু)))"



0

সি #, 229 বাইট

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

using C=System.Console;
class P{
    static void Main(string[]a){
        int l=a[0].Length,i=l;
        while(i>0)
            if(a[0][--i]=='(')C.CursorTop++;
        while(++i<l){
            char c=a[0][i];
            if(c=='('){
                c=' ';
                C.CursorTop--;
            }
            if(c==')'){
                c=' ';
                C.CursorTop++;
            }
            C.Write(c);
        }
    }
}

0

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

(($h=($c=$args|% t*y)|%{($l+=(1,-1)[$_-40])})|sort)[-1]..0|%{$x=0;$y=$_
-join($c|%{"$_ "[$h[$x++]-ne$y-or$_-in40,41]})}

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

পার্শ্ব প্রতিক্রিয়া: চরগুলি &এবং 'উচ্চতা হিসাবে (এবং পরিবর্তিত হয় )তবে প্রদর্শিত হয়। এর জন্য ফলাফলের তুলনা করুন:

&$f "((1 2)(3 (4 5) moo)) (i (lik(cherries)e (woohoo)))"
&$f "&&1 2'&3 &4 5' moo'' &i &lik&cherries'e &woohoo'''"

কম গল্ফড:

$chars=$args|% toCharArray

$heights=$chars|%{
    $level+=(1,-1)[$_-40]       # 40 is ASCII for '(', 41 is ASCII for ')'
    $level
}

$maxHeight=($heights|sort)[-1]

$maxHeight..0|%{
    $x=0;$y=$_
    $line=$chars|%{
        "$_ "[$heights[$x++]-ne$y -or $_-in40,41]
    }
    -join($line)
}

-1

VB.net (এসঅ্যান্ডজির জন্য)

কোডের সবচেয়ে সুন্দর নয়।

Module Q
 Sub Main(a As String())
  Dim t = a(0)
  Dim h = 0
  For Each m In (From G In (t.Select(Function(c)
                                     h += If(c = "(", 1, If(c = ")", -1, 0))
                                     Return h
                                   End Function).Select(Function(y, i) New With {.y = y, .i = i}))
             Group By G.y Into Group
             Order By   y Descending
            Select Group.ToDictionary(Function(x) x.i)
               ).Select(Function(d) New String(
                          t.Select(Function(c,i)If(d.ContainsKey(i),If(c="("c Or c=")"c," "c,c)," "c)).ToArray))
   Console.WriteLine(m)
  Next
 End Sub
End Module
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.