1 পি 5: নেস্টেড বাক্সগুলি


53

এই টাস্কটি প্রথম পর্যায়ক্রমিক প্রিমিয়ার প্রোগ্রামিং ধাঁধা পুশের অংশ

আপনি নিম্নলিখিত বিন্যাসে আইটেমের শ্রেণিবিন্যাস পাবেন:

2
Hat
1
Gloves

যা বাক্সে রাখা প্রয়োজন, যেমন:

.------------.
| Hat        |
| .--------. |
| | Gloves | |
| '--------' |
'------------'

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

যেমন দেখা যায়, বাক্সগুলি বাক্সগুলির অভ্যন্তরেও বাস করতে পারে। এবং এগুলি সর্বদা বৃত্তাকার ... সাজানো (মূল কোণগুলি ক্ষতের ঝুঁকি এবং আমরা তা চাই না)।

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


সবিস্তার বিবরণী

  • বাক্সগুলি নিম্নলিখিত অক্ষরগুলি থেকে তৈরি করা হয়:

    • | (U + 007C) উল্লম্ব প্রান্তগুলি তৈরি করতে ব্যবহৃত হয়।
    • - (U + 002D) অনুভূমিক প্রান্তগুলি তৈরি করতে ব্যবহৃত হয়।
    • ' (U + 0027) হল নীচের কোণায় lower
    • . (U + 002E) হল গোলাকার উপরের কোণগুলি।

    একটি বাক্স তাই দেখায়:

    .--.
    |  |
    '--'
    

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

  • বাক্সগুলিতে পাঠ্য বা অন্যান্য আইটেমগুলির আইটেমগুলির ক্রম থাকতে পারে। একটি বাক্সে পৃথক আইটেম শীর্ষ থেকে নীচে রেন্ডার করা হয়। ক্রম A, B, C এভাবে নীচে রেন্ডার করে:

    .---.
    | A |
    | B |
    | C |
    '---'
    

    এটি অবশ্যই নেস্টেড বাক্সগুলিতেও প্রযোজ্য, যা কেবল পাঠ্যের মতো একটি আইটেম। সুতরাং ক্রম এ, বি, বক্স (সি, বক্স (ডি, ই)), এফ নীচে রেন্ডার করবে:

    .-----------.
    | A         |
    | B         |
    | .-------. |
    | | C     | |
    | | .---. | |
    | | | D | | |
    | | | E | | |
    | | '---' | |
    | '-------' |
    | F         |
    '-----------'
    
  • বাক্সগুলি সামগ্রীতে তাদের আকার সামঞ্জস্য করে এবং নেস্টেড বাক্সগুলি সর্বদা তাদের পিতামাতার আকারে প্রসারিত করে। সামগ্রীর আগে এবং পরে সর্বদা একটি স্থান থাকে, যাতে পাঠ্য বা নেস্টেড বাক্সগুলি বাইরের বাক্সের প্রান্তের খুব কাছে না থাকে। সংক্ষেপে, নিম্নলিখিতটি ভুল:

    .---.
    |Box|
    '---'
    

    এবং নিম্নলিখিতটি সঠিক:

    .-----.
    | Box |
    '-----'
    

    দেখতে অনেক সুন্দর লাগছে :-)

  • পাঠ্য আইটেমগুলি ( নীচে ইনপুট দেখুন) ঠিক পুনরুত্পাদন করতে হবে।

  • সর্বদা একক শীর্ষ স্তরের বাক্স থাকে (সিএফ। এক্সএমএল)। তবে, একটি বাক্সে আরও বেশ কয়েকটি বাক্স থাকতে পারে।

ইনপুট

  • ইনপুট মান ইনপুট দেওয়া হয়; সহজেই পরীক্ষার জন্য কোনও ফাইল থেকে পুনঃনির্দেশিত।

  • ইনপুটটি লাইন-ভিত্তিতে দেওয়া হয়, প্রতিটি লাইনটি বর্তমান বাক্সে রাখার জন্য কোনও পাঠ্য আইটেমকে প্রতিনিধিত্ব করে বা একটি নতুন বাক্স খোলায় with

  • প্রতিটি লাইন একটি লাইন ব্রেক দ্বারা শেষ হয়।

  • পাঠ্য আইটেমগুলিতে একটি লাইন দ্বারা চিহ্নিত করা হয় যা কোনও সংখ্যার সমন্বিত থাকে না (নীচে দেখুন)। পাঠ্যে বর্ণানুক্রমিক অক্ষর, স্থান এবং বিরামচিহ্ন ( .,-'"?!()) ব্যবহার করা হয়। পাঠ্য কোনও স্পেস দিয়ে শুরু বা শেষ হবে না এবং এতে সর্বদা কমপক্ষে একটি অক্ষর থাকবে।

  • একটি বাক্সে এটির একটি সংখ্যা দিয়ে একটি একক লাইন দিয়ে শুরু হয়। নম্বরটি বাক্সের আকারকে বোঝায়, অর্থাৎ এটিতে নিচের আইটেমগুলির সংখ্যা:

    2
    A
    B
    

    দুটি পাঠ্য আইটেম সহ একটি বাক্স উত্পাদন করে:

    .---.
    | A |
    | B |
    '---'
    

    একটি বাক্সে সর্বদা কমপক্ষে একটি আইটেম থাকবে।

  • বাক্সগুলির শেষটি স্পষ্টভাবে একটি লাইনের সাথে চিহ্নিত করা যায় না; পরিবর্তে বাক্সগুলি স্পষ্টরূপে আইটেমগুলির নির্দিষ্ট সংখ্যা putোকানোর পরে বন্ধ করা হয়।

  • এতে যত আইটেমই থাকুক না কেন একটি বাক্স সর্বদা কেবল একটি আইটেম is যেমন

    3
    A
    4
    a
    b
    c
    d
    B
    

    তিনটি আইটেম সহ একটি বাক্স আসবে, যার মধ্যে দ্বিতীয়টি চারটি আইটেম সহ অন্য একটি বাক্স।

    বাসা বাঁধাই এই সত্যকে প্রভাবিত করে না যে বাক্সটি কেবল একটি আইটেম।

সীমা

  • সর্বাধিক পাখির স্তর পাঁচটি । অর্থাৎ একে অপরের অভ্যন্তরে সর্বাধিক পাঁচটি বাক্স রয়েছে। এর মধ্যে বাইরেরতম অন্তর্ভুক্ত রয়েছে।

  • প্রতি বাক্সে সর্বোচ্চ দশটি আইটেম রয়েছে।

  • পাঠ্য আইটেমগুলির সর্বাধিক 100 অক্ষর রয়েছে।

আউটপুট

  • আউটপুট হ'ল উপরে বর্ণিত নিয়ম অনুসারে সমস্ত ধারণ এবং নেস্টেড আইটেম সহ রেন্ডার বাক্স।
  • আউটপুট স্ট্যান্ডার্ড আউটপুট দেওয়া উচিত এবং এটি ঠিক মেলে। কোনও নেতৃস্থানীয় বা অনুসরণকারী শ্বেত স্পেস অনুমোদিত নয়।
  • প্রতিটি লাইন একটি লাইন বিরতি দিয়ে শেষ সহ, সমাপ্ত করতে হবে।

জয়ের শর্ত

  • সংক্ষিপ্ততম কোড জয় (যেমন স্বীকৃত উত্তর পায়)।

নমুনা ইনপুট 1

3
This is some text!
Oh, more text?
Just text for now, as this is a trivial example.

নমুনা আউটপুট 1

.--------------------------------------------------.
| This is some text!                               |
| Oh, more text?                                   |
| Just text for now, as this is a trivial example. |
'--------------------------------------------------'

নমুনা ইনপুট 2

4
Extreme
nesting
3
of
boxes
4
might
lead
to
2
interesting
1
visuals.
Indeed!

নমুনা আউটপুট 2

.--------------------------.
| Extreme                  |
| nesting                  |
| .----------------------. |
| | of                   | |
| | boxes                | |
| | .------------------. | |
| | | might            | | |
| | | lead             | | |
| | | to               | | |
| | | .--------------. | | |
| | | | interesting  | | | |
| | | | .----------. | | | |
| | | | | visuals. | | | | |
| | | | '----------' | | | |
| | | '--------------' | | |
| | '------------------' | |
| '----------------------' |
| Indeed!                  |
'--------------------------'

নমুনা ইনপুট 3

1
1
1
1
1
Extreme nesting Part Two

নমুনা আউটপুট 3

.------------------------------------------.
| .--------------------------------------. |
| | .----------------------------------. | |
| | | .------------------------------. | | |
| | | | .--------------------------. | | | |
| | | | | Extreme nesting Part Two | | | | |
| | | | '--------------------------' | | | |
| | | '------------------------------' | | |
| | '----------------------------------' | |
| '--------------------------------------' |
'------------------------------------------'

নমুনা ইনপুট 4

3
Foo
2
Bar
Baz
2
Gak
1
Another foo?

নমুনা আউটপুট 4

.----------------------.
| Foo                  |
| .------------------. |
| | Bar              | |
| | Baz              | |
| '------------------' |
| .------------------. |
| | Gak              | |
| | .--------------. | |
| | | Another foo? | | |
| | '--------------' | |
| '------------------' |
'----------------------'

পরীক্ষা স্ক্রিপ্ট

যেহেতু সঠিকভাবে বিশদ পাওয়া আমাদের সময়ে কঠিন হতে পারে আমরা ( ভেন্টোরো এবং আমি) একটি পরীক্ষা স্ক্রিপ্ট প্রস্তুত করেছি আপনি এটি সঠিক কিনা তা পরীক্ষা করে আপনার সমাধানটি চালাতে পারেন। এটি পাওয়ারশেল স্ক্রিপ্ট এবং ব্যাশ স্ক্রিপ্ট উভয়ই হিসাবে উপলব্ধ । আবাহন হল: <test-script> <program invocation>

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

আপডেট 2: আমি আমার পরীক্ষার কেস জেনারেটর আপলোড করেছি । নেট # রানটাইমকে লক্ষ্য করে সি # তে লিখিত । এটি মনোর উপর চলে। এটি লোকদের তাদের বাস্তবায়ন পরীক্ষা করতে সহায়তা করতে পারে। আপনি যে কাজটি সীমাবদ্ধ করতে পারেন তার সীমাবদ্ধতার হিসাবে একটি চূড়ান্ত খারাপ পরিস্থিতি হিসাবে:

nb.exe 1 10 10 5 100 100 | my invocation

যা কেবলমাত্র আন্তঃতম স্তর পর্যন্ত বাক্স তৈরি করবে এবং প্রতি বাক্সে আইটেমের সর্বাধিক সংখ্যা এবং পাঠ্য আইটেমের সর্বাধিক দৈর্ঘ্য উভয়ই ব্যবহার করবে। যদিও আমি এটি পরীক্ষার কেসটিকে টেস্ট স্ক্রিপ্টে অন্তর্ভুক্ত করি না, যদিও এটি বেশ বড় এবং আউটপুট আরও বড়।

আপডেট 3: আমি পাওয়ারশেল পরীক্ষা স্ক্রিপ্ট আপডেট করেছি যা স্ক্রিপ্টে লাইন শেষ কী ছিল এবং সমাধানটি কী প্রান্তে প্রিন্ট করে তা নির্ভর করে ত্রুটি ছুঁড়ে দেওয়ার প্রবণতা ছিল। এখন এটি উভয়েরই অজ্ঞেয় হওয়া উচিত। আবার বিভ্রান্তির জন্য দুঃখিত।


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

@ জুয়ান: এটি ধরার জন্য ধন্যবাদ। আশ্চর্যজনক যে তাদের মতো পিছলে যায়। সম্পাদিত :-)
জো

1
@ জোয়ি এক বৃদ্ধা কিন্তু ভাল মানুষ। আশা করি এটি আমাদের নতুন ব্যবহারকারীদের কয়েকজনকে ভাল, সুনির্দিষ্ট প্রশ্ন লিখতে উদ্বুদ্ধ করতে পারে। :-)
গ্যারেথ

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

উত্তর:



26

পাইথন, 204 অক্ষর

def P(n):x=raw_input();return eval('[(n+".","","-")]'+'+P(n+"| ")'*int(x))+[(n+"'",'','-')]if'0'<x<':'else[(n,x,' ')]
r=P('')
for q,t,f in r:print q+t+f*(max(len(2*x+y)for x,y,a in r)-len(2*q+t))+q[::-1]

Pট্রিপলগুলির একটি তালিকা প্রদান করে, যার প্রতিটি লাইন উপসর্গ / প্রত্যয় (প্রত্যয়টি পূর্বের বিপরীতমুখী), কিছু লাইন পাঠ্য এবং একটি লাইন ভরাট চরিত্র। সমস্ত ট্রিপল গণনা করার পরে, তারা সমস্ত লাইন একই দৈর্ঘ্য তৈরি করতে ডান সংখ্যক ভরাট অক্ষর ব্যবহার করে মুদ্রিত হয়।

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

def get_lines(prefix):
  line=raw_input()
  result=[]
  if line.isdigit():
    result.append((prefix+'.', '', '-'))
    for i in xrange(int(line)):
      result += get_lines(prefix + '| ')
    result.append((prefix+"'", '', '-'))
  else:
    result.append((prefix, line, ' '))
  return result
lines=get_lines('')
width=max(2*len(prefix)+len(text) for prefix,text,fill in lines)
for prefix,text,fill in lines:
  print prefix+text+fill*(width-2*len(prefix)-len(text))+prefix[::-1]

ওহ, তাড়াতাড়ি ছিল। এবং Pসেখানে আকর্ষণীয় ধারণা ।
জোয়ি

বাহ, সত্যিই। এটি আকর্ষণীয়, আপনি কি বর্ণাolf্য সংস্করণটি পোস্ট করতে পারেন? আমি বুঝতে চাই যে কীভাবে ইভাল বিট কাজ করে। হেই, আমার অবারিত অজগর সমাধানটি 1500+ চিআর :( যদিও আমি একেবারে ভিন্ন (এবং অদক্ষ) পদ্ধতি গ্রহণ করি
কেসি

@ ক্যাসি: ইভাল একটি লুপের জন্য কেবল গল্ফিং শর্টকাট, এটি মৌলিক নয়। আমি এক সেকেন্ডে একটি অদ্বিতীয় সংস্করণ পোস্ট করব ...
কিথ র্যান্ডাল

13

রুবি 1.9, 174 টি অক্ষর

r=->l{$*<<(l*2+i=gets.chop).size;/\d/?eval('[l+?.,p=?-,p,'+'*r["| "+l],'*i.to_i+"l+?',p,p]"):[l,i,?\s]}
r[""].each_slice(3){|a,b,c|puts a+b+c*($*.max-(a*2+b).size)+a.reverse}

কিথের সমাধানের সাথে কিছুটা মিল ।


6

এপিএল (78)

{∧/⎕D∊⍨I←⍞:{∆,('-'⍪⍵⍪'-'),∆←'.|'''/⍨1(⊃⍴⍵)1}⍕⍪/{⍵↑[2]⍨⌈/⊃∘⌽∘⍴¨∆}¨∆←∇¨⍳⍎I⋄⍉⍪I}⍬

5
এটি আমি কী করি না
নওয়েজ

সমাধানটি পরীক্ষা করতে আমি এটি টিও.আরুন চালাতে পারি না। অন্যথায় আমি স্বীকৃত উত্তরটিও স্যুইচ করতাম।
জোয়

5

পাইথন - 355 314 259 অক্ষর

w=0
def p(n,l):
 global w;f=[(l-1,0)]
 for k in' '*n:
  i=raw_input()
  try:f+=p(int(i),l+1)
  except:f+=[(l,i)];w=max(w,4*l+len(i))
 return f+[(l-1,1)]
for l,s in p(input(),1):p=w-4*l-2;print'| '*l+(".'"[s]+'-'*p+".'"[s]if s<2 else s+' '*(p+2-len(s)))+' |'*l

প্রায় একটি 100 চর হ্রাস, ভাল কাজ।
কেসি

5

রুবি 1.9, 229 228 226 223 222

g=->n{(1..n).map{g[Integer l=gets.chop]rescue l}}
w=->b{b.bytesize rescue b.map{|e|w[e]}.max+4}
p=->b,c{r=c-2
[?.+?-*r+?.,*b.map{|i|p[i,c-4]}.flatten.map{|k|"| #{k} |"},?'+?-*r+?']rescue[b.ljust(c)]}
puts p[b=g[1][0],w[b]]

5

সি, 390 366 363 টি অক্ষর

#define F(n)for(int i=n;i--;)
#define H(n,s,a...)F(n)printf(s);printf(a);
#define I(s)H(v,"| ",s)H(l-2,"-",s)J
#define J H(v," |","\n")
S[1<<17][26],N[1<<17],P,a;E(p){int l=strlen(gets(S[p]));if(sscanf(S[p],"%d",N+p))F(N[p])l<(a=E(++P))?l=a:l;return l+4;}R(p,v,l){if(N[p]){I(".")F(N[p])R(++P,v+1,l-4);I("'")}else{H(v,"| ","%-*s",l,S[p])J}}main(){R(P=0,0,E(0)-4);}

সঙ্গে সংকলন gcc -std=gnu99 -w file.c

এমনকি কিথের সংস্করণটির খুব কাছাকাছিও নয়, তবে ওহে, এটি ভাল 'সি


এখানে 160 টি পরীক্ষার মধ্যে কেবল 159 পাস করেছে।
জোয়

সেকি। আমার মনে হয় এখন ঠিক আছে। আমি চরম ক্ষেত্রে \ 0 এর জন্য জায়গা বরাদ্দ করতে ভুলে যাচ্ছিলাম।
esneider

এখনও দেখতে একই, টেস্ট # 142 ব্যর্থ। যাইহোক, আসল চরম কেসটি এমনকি উপস্থিত নেই কারণ এটিতে 10 এমআইবি ইনপুট এবং 78 এমআইবি আউটপুট রয়েছে। আমি চাইনি যে পরীক্ষার স্ক্রিপ্টটি এত বড় হোক ;-)
জোয়

অদ্ভুত, আমি পাচ্ছি 160/160 passed(আমি বোঝাতে চাইছি 100 অক্ষরের একটি স্ট্রিং, যা যাইহোক উপস্থিত নেই)
esneider

এইচএম, অদ্ভুত। এখানে x64 এর FreeBSD 8.2-RELEASE #5: Sun Feb 27 10:40:25 CET 2011সাথে gcc version 4.2.1 20070719 [FreeBSD]। আমি আপনার শব্দটি 160 এর জন্য নেব, তারপরে :-)। এবং এখানে 100 টি অক্ষর সহ একটি পরীক্ষার কেস থাকতে হবে, (টেস্ট 143–147)।
জো

4

খুব কার্যকরী পাইথন, 460 টি অক্ষর

r=range
s=lambda x:isinstance(x,str)
w=lambda x:reduce(max,[len(i)if s(i)else w(i)+4 for i in x])
z=lambda b,x:''.join(b for i in r(x))
def g(n=1):
 t=[]
 for i in r(n):
  x=raw_input('')
  try:t+=[g(int(x))]
  except:t+=[x]
 return t
o=list.append
def y(c,m):
 f='| ';h=' |';e=z('-',m+2);a='.'+e+'.';b="'"+e+"'";t=[a]
 for i in c:
  if s(i):o(t,f+i+z(' ',m-len(i))+h)
  else:[o(t,f+j+h)for j in y(i,m-4)]
 return t+[b]
x=g()[0];m=w(x);print '\n'.join(y(x,m))

এইচএম, এটি আমার পক্ষে কাজ করবে বলে মনে হচ্ছে না |অক্ষরগুলি সঠিকভাবে ফাঁকা নেই। এটি আমার অজগর সমাধানের সাথে খুব মিল
কেসি

2
প্রকৃতপক্ষে, পরীক্ষার কোনও ক্ষেত্রে পাস করে না। এরডানো: আমরা সেগুলি অন্তর্ভুক্ত করেছি যাতে কেউ উত্তরগুলি জমা দিতে না পারে যা স্পষ্টত ভুল।
জোয়

1
আমার ধারণা আমি কোডটির একটি পুরানো সংস্করণ পেস্ট করেছি। এখন কাজ করা উচিত। পেশাদারহীন হওয়ার জন্য দুঃখিত।
এর্ডানো

আমার জন্য কাজ কর! সুন্দর সমাধান, আমি কার্যকরী পদ্ধতির পছন্দ করি।
কেসি

আসলে, এখন কাজ করে।
জোয়

4

হাস্কেল, 297 টি অক্ষর

f§(a,b)=(f a,b)
h c=(c,'-',c)
b l=h".":map(\(p,f,q)->("| "++p,f,q++" |"))l++[h"'"]
y[]s z=([(s,' ',"")],z)
y[(n,_)]_ z=b§foldr(\_(l,w)->(l++)§x w)([],z)[1..n]
x(a:z)=y(reads a)a z
m(p,_,q)=length$p++q
n®a@(p,c,q)=p++replicate(n-m a)c++q++"\n"
o(l,_)=l>>=(maximum(map m l)®)
main=interact$o.x.lines

গল্ফ করার সময়, পদ্ধতিটি বেশ সোজা এগিয়ে। শুধুমাত্র সীমা মেমরি উপলব্ধ।


4

সি # - 1005 859 852 782 টি অক্ষর

using c=System.Console;using System.Linq;class N{static void Main(){new N();}N(){var i=R();c.WriteLine(i.O(0,i.G().W));}I R(){var s=c.ReadLine();int l=0,i=0;if(int.TryParse(s,out l)){var b=new I(l);for(;i<l;){b.m[i++]=R();}return b;}else{return new I(0,s);}}class P{public int W;public int H;}class I{public I[]m;bool z;string t;public I(int l,string r=""){z=l!=0;m=new I[l];t=r;}public P G(){var s=new P();if(z){var d=m.Select(i=>i.G());s.W=d.Max(y=>y.W)+4;s.H=d.Sum(y=>y.H)+2;}else{s.W=t.Length;s.H=1;}return s;}public string O(int l,int w){if(z){string s=A(l,"."+"-".PadRight(w-2,'-')+"."),e=s.Replace(".","'");foreach(var i in m){s+="\n"+i.O(l+1,w-4);}s+="\n"+e;return s;}else{return A(l,t.PadRight(w));}}}static string A(int l,string o){while(l-->0){o= "| "+o+" |";}return o;}}

এটির আরও উন্নতি করা সম্ভব বলে আমি নিশ্চিত হয়ে ওঠার দরকার আছে তবে এটি এটি আমার প্রাথমিক তৃতীয় পাস।

Ungolf'd:

using c=System.Console;
using System.Linq;

class NestedBoxes
{
    static void Main()
    {
        new NestedBoxes();
    }
    NestedBoxes()
    {
        var item = ReadItem();
        c.WriteLine(item.Print(0, item.GetSize().Width));
    }
    Item ReadItem()
    {
        var line = c.ReadLine();
        int count = 0, i = 0;
        if (int.TryParse(line, out count))
        {
            var box = new Item(count);
            for (; i < count;)
            {
                box.items[i++] = ReadItem();
            }
            return box;
        }
        else
        {

            return new Item(0,line);
        }
    }
    class Size
    {
        public int Width;
        public int Height;
    }
    class Item
    {
        public Item[] items;
        bool isBox;
        string text;
        public Item(int size,string word="")
        {
            isBox = size != 0; items = new Item[size]; text = word;
        }
        public Size GetSize()
        {
            var s = new Size();
            if (isBox)
            {
                var sizes = items.Select(i => i.GetSize());
                s.Width = sizes.Max(y => y.Width) + 4; s.Height = sizes.Sum(y => y.Height) + 2;
            }
            else
            {
                s.Width = text.Length;
                s.Height = 1;
            }
            return s;
        }
        public string Print(int level, int width)
        {
            if (isBox)
            {
                string output = AddLevels(level, "." + "-".PadRight(width - 2, '-') + "."),
                        bottomLine = output.Replace(".", "'");
                foreach (var item in items)
                {
                    output += "\n" + item.Print(level + 1, width - 4);
                }
                output += "\n" + bottomLine;
                return output;
            } else {return AddLevels(level, text.PadRight(width)); }
        }
    }
    static string AddLevels(int level, string output)
    {
        while(level-->0)
        {
            output = "| " + output + " |";
        }
        return output;
    }
}

@ জো, হ্যাঁ, আমার অবশ্যই এগুলি আবারও করা উচিত। চেষ্টা করার চেষ্টা করুন এবং এটি কেটে ফেলতে যুক্তি দিয়ে খেলতে হবে।
রেবেকা চেরনফ

আমি সি সাথে পরিচিত না, কিন্তু জাতীয়, আপনি একাধিক Var বিবৃতি এক, ভালো একত্রিত করতে পারেন: var a = 1, b = 2, c = 3;। আপনি কি সি তে একই জিনিস করতে পারবেন না?
nyuszika7h

2
@ নিউউজিকা H এইচ, এটি সি #, সি নয় You আপনি এর varমতো অন্তর্নিহিত বিবৃতিগুলি একত্রিত করতে পারবেন না । আপনি যদি কেবল জোয়ের মতো একটি স্পষ্ট ধরনের ব্যবহার করে উল্লিখিত থাকে তবে আপনি সংহত করতে পারবেন string b="",e=""
রেবেকা চেরনফ

@ রেবেকা চেরনফ: আমি এখন অন্য 686 জনের উত্তর নিয়ে কাজ করেছি।
নিক লারসেন

@ নিকলারসেন, দুর্দান্ত - তবে আমি খুঁজছি না। প্রশ্ন: আমার এখনও যেতে আমার কিছু সময় প্রয়োজন। এটি আমার যুক্তিবিদ্যার প্রাথমিক সূচনা ছিল, আমি নিশ্চিত যে যুক্তি সম্পর্কে আমি আরও স্মার্ট হতে পারি এমন জায়গাগুলি রয়েছে, এটি মনোযোগ দেওয়ার জন্য কেবল সময় প্রয়োজন।
রেবেকা চেরনফ

4

পিএইচপি, 403 388 306 অক্ষর

<?b((int)fgets(STDIN),'');foreach($t as $r)echo$r[0].str_pad($r[2],$w-2*strlen($r[0]),$r[1]).strrev($r[0])."\n";function b($c,$p){global$t,$w;$t[]=array($p.".","-");while($c--){if(($d=trim(fgets(STDIN)))>0)b($d,"| ".$p);else$t[]=array("| ".$p," ",$d);$w=max($w,strlen($d.$p.$p)+4);}$t[]=array($p."'","-");}

Ungolfed:

box((int)fgets(STDIN), '');

foreach($table as $row) {
    $prefix = $row[0];
    $pad = $row[1];
    $data = $row[2];
    echo $prefix . str_pad($data, ($width - 2*strlen($prefix)), $pad) . strrev($prefix)."\n";
}

function box($count,$prefix) {
    global $table, $width;
    $table[] = array($prefix.".","-");
    while($count--) {
        if(($data = trim(fgets(STDIN))) > 0) {
            box($data, "| ".$prefix);
        } else {
            $table[] = array("| ".$prefix, " ", $data);
        }
        $width = max($width,strlen($data.$prefix.$prefix)+4);
    }
    $table[] = array($prefix."'","-");
}
?>

আমি কীথের কাছ থেকে উপসর্গ-ধারণা ধার নিয়েছি (এটি কি আদৌ অনুমোদিত?), নাহলে এটি মূল হিসাবে অনেক বেশি। এখনও 300 এর নিচে পেতে পারেনি this অগ্রে।


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

3

পিএইচপি, 806 769 721 653 619 অক্ষর

<?php function A($a,$b,$c,&$d){for($e=$b;$e>0;$e--){$f=fgets($a);if(false===$f){return;}$g=intval($f);if(0<$g){$h[]=A($a,$g,$c+1,$d);}else{$f=trim($f);$h[]=$f;$j=strlen($f)+4*$c;if($d<$j){$d=$j;}}}return $h;}$d=0;$h=A(STDIN,intval(fgets(STDIN)),1,&$d);function B($k,$c,$d){$f=str_pad('',$d-4*$c-2,'-',2);return C($k.$f.$k,$c,$d);}function C($f,$c,$d){$f=str_pad($f,$d-4*$c,' ');$f=str_pad($f,$d-2*$c,'| ',0);$f=str_pad($f,$d,' |');return $f;}function D($l,$c,$d){if(!is_array($l)){echo C($l,$c,$d)."\n";return;}echo B('.',$c,$d)."\n";foreach($l as $m){echo D($m,$c+1,$d);}echo B('\'',$c,$d)."\n";}D($h,0,$d);exit(0);?>

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

<?php
function read_itemgroup($handle, $item_count, $depth, &$width) {

    //$items = array();

    for($i = $item_count; $i > 0; $i--) {
        $line = fgets( $handle );
        if(false === $line) {
            return;
        }

        $line_int = intval($line);
        if(0 < $line_int) {
            // nested group
            $items[] = read_itemgroup($handle, $line_int, $depth + 1, $width);
        }
        else {
            // standalone item
            $line = trim($line);
            $items[] = $line;

            // determine width of item at current depth
            $width_at_depth = strlen($line) + 4 * $depth;
            if($width < $width_at_depth) {
                $width = $width_at_depth;
            }
        }
    }

    return $items;
}
$width = 0;
$items = read_itemgroup(STDIN, intval(fgets( STDIN )), 1, &$width);

//var_dump($items, $width);

function render_line($corner, $depth, $width) {
    $line = str_pad('', $width - 4 * $depth - 2, '-', 2); // 2 = STR_PAD_BOTH
    return render_item($corner . $line . $corner, $depth, $width);
}

function render_item($line, $depth, $width) {
    $line = str_pad($line, $width - 4 * $depth, ' ');
    $line = str_pad($line, $width - 2 * $depth, '| ', 0); // 0 = STR_PAD_LEFT
    $line = str_pad($line, $width, ' |');
    return $line;
}

function render($item, $depth, $width) {
    if(!is_array($item)) {
        echo render_item($item, $depth, $width) . "\n";
        return;
    }
    echo render_line('.', $depth, $width) . "\n";
    foreach($item as $nested_item) {
        echo render($nested_item, $depth + 1, $width);
    }
    echo render_line('\'', $depth, $width) . "\n";
}

render($items, 0, $width);

exit(0);
?>

আপনি কেন এক-বর্ণের পরিবর্তে দ্বি-বর্ণের ফাংশন নাম ব্যবহার করছেন?
লোজ্যাকার

@ লোকাক্লার: ভাল ক্যাচ, এটি এমন একটি জিনিস যা আমার এখনও অপ্টিমাইজ করতে হবে। আমার হাতে কোনও মিনিফায়ার নেই, তাই আমি নিজেই এটি করেছি did আমার কী কী বাড়ানো হবে (কোডওয়াইজ, মিনিফিকেশন নয়) সম্পর্কেও আমার বেশ কয়েকটি ধারণা রয়েছে, তাই আমি পরে সংশোধিত সংস্করণটি পোস্ট করব।
মাইকে

1
প্রথমত, এটি <?চালানো শুরুতে একটি অনুপস্থিত । তারপরে আপনি স্পষ্টতই অন্তর্নিহিত বাক্সের প্রস্থ হিসাবে একটি পরীক্ষার ক্ষেত্রে সমস্ত পাঠ্য আইটেমের সর্বাধিক দৈর্ঘ্যটি ব্যবহার করছেন । এই কোডটি কেবল পরীক্ষার ক্ষেত্রে 118 (লিনাক্স এবং ফ্রিবিএসডি পরীক্ষিত) পাস করে। আমার কোন ধারণা কি PowerShell স্ক্রিপ্ট এটি চালাতে না হবে করেনি আছে, যদিও :-( যেমন invoking। powershell -noprofile -file test.ps1 php boxes.phpকাজ করা উচিত, আসলে কিন্তু আমি আমার উইন্ডোজ মেশিনে কোন পিএইচপি পরীক্ষা করতে
জোয়ি

সর্বশেষতম ব্যাশ স্ক্রিপ্টটি ব্যবহার করে এটি আমার বাক্সে পরীক্ষিত, 118/156 পেয়েছে। আমি আউটপুটটি একটি সংক্ষেপে
জুয়ান

1
শুনে খুশি হলাম :). এটিই আমি একটি পরীক্ষার স্ক্রিপ্ট লেখার জন্য পেয়েছি যা প্রাথমিকভাবে একক-লাইন আউটপুট ;-) জন্য ছিল
জো

3

জাভা - 681 668 অক্ষর

import java.util.*;public class b{static int m,h,i;public static void main(String[]a)throws Throwable{for(Object o:z("")){a=(String[])o;String s=a[0]+a[1];i=a[0].length();for(h=0;h<m-i*2-a[1].length();h++){s+=a[2];}for(h=i;h>0;h--){s+=a[0].charAt(h-1);}System.out.println(s);}}static List z(String p)throws Throwable{String b="",d="";List l=new ArrayList();while((i=System.in.read())>-1){if(10==i){if(d!=""){String[]v={p+".",b,"-"},t={p+"'",b,"-"};l.add(v);for(int u=0;u<Integer.parseInt(d);u++){l.addAll(z(p+"| "));}l.add(t);}else{h=b.length()+p.length()*2;if(m<h)m=h;String[]v={p,b," "};l.add(v);}break;}else if(i>47&&i<58){d+=(char)i;}else {b+=(char)i;}}return l;}}

মূলত কীথ র্যান্ডালের পাইথন কোডের মতো একই পদ্ধতি

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

import java.util.*;

public class b {
    static int m, h, i;

    public static void main(String[] a) throws Throwable {
        for (Object o : z("")) {
            a = (String[]) o;
            String s = a[0] + a[1];
            i = a[0].length();
            for (h = 0; h < m - i * 2 - a[1].length(); h++) {
                s += a[2];
            }
            for (h = i; h > 0; h--) {
                s += a[0].charAt(h - 1);
            }
            System.out.println(s);
        }
    }

    static List z(String p) throws Throwable {
        String b = "", d = "";
        List l = new ArrayList();
        while ((i = System.in.read()) > -1) {
            if (10 == i) {
                if (d != "") {
                    String[] v = { p + ".", b, "-" }, t = { p + "'", b, "-" };
                    l.add(v);
                    for (int u = 0; u < Integer.parseInt(d); u++) {
                        l.addAll(z(p + "| "));
                    }
                    l.add(t);
                } else {
                    h = b.length() + p.length() * 2;
                    if (m < h)
                        m = h;
                    String[] v = { p, b, " " };
                    l.add(v);
                }
                break;
            } else if (i > 47 && i < 58) {
                d += (char) i;
            } else {
                b += (char) i;
            }
        }
        return l;
    }
}

আমি মনে করি আপনি যখন একবার থাকবেন তখন আপনি একটি স্থান থেকে মুক্তি পেতে পারেন throws
জোয়

হ্যাঁ! এছাড়াও আরও কয়েকটি চরিত্রকে বাদ দিয়েছিল। (ধরে নেওয়া যায় যে প্রতিটি লাইন নিউলাইন চর, রিলান্ডান্টের সাথে সমাপ্ত হয় break;)
গ্রেগ শোয়েলার

সম্ভবত charবেশি দিন এসকি কোডগুলি দেখে তুলনা জরিমানা করতে পারে ... তবে আমাকে ছুটির জন্য প্রস্তুত হতে হবে
গ্রেগ শোয়েলার

3

পার্ল - 200 199 চর

কিথ র্যান্ডালসের পাইথন (সুন্দর নকশা, কিথ) হিসাবে একই অ্যালগরিদম, তবে এই পার্লটিতে আরও কিছুটা কমপ্যাক্ট লাগবে।

sub P{$_=<>;chop;$m>($l=length"$_@_@_")or$m=$l;/^\d/?(["@_.","","-"],(map{P("| @_")}1..$_),["@_'","","-"]):["@_",$_," "]}map{($q,$t,$f)=@$_;print"$q$t",($f x($m-length"$q$t$q")).reverse($q),"\n"}(P);

1
$_@_@_দেখে মনে হচ্ছে কেউ ডলারের
চিহ্নটিকে

3

F # - 341 টি অক্ষর

let rec f(x,y)=[
 let l=stdin.ReadLine()
 let q,d=Core.int.TryParse l
 if q then
  yield x+".","",'-',"."+y
  for i=1 to d do yield!f(x+"| ",y+" |")
  yield x+"'","",'-',"'"+y
 else yield x,l,' ',y]
let l=f("","")
for w,x,y,z in l do printfn"%s"(w+x.PadRight(List.max(l|>List.map(fun(w,x,y,z)->2*w.Length+x.Length))-2*w.Length,y)+z)

কীথের সমাধানের একটি এফ # সংস্করণ। তালিকাগুলি ডিফল্টরূপে অপরিবর্তনীয়, সুতরাং এই সংস্করণটি পুরো পুনরাবৃত্ত ফাংশনটিকে একটি তালিকায় স্টাফ করে, তালিকাটি ফেরত দেয়, যেখান থেকে for..doলুপ এবং এ ব্যবহার করে আইটেমগুলি বের করা হয় yield!। আমি উপসর্গটি সংক্ষেপে বিপরীত করার কোনও উপায় খুঁজে পেলাম না, তাই আমি কেবল ট্রিপলের উপরে প্রত্যয়টি সংযুক্ত করেছি।

এফওয়াইআই, ট্রাইপার্স পদ্ধতিটি দ্বিগুণ দেয় (bool,int)


2

ক্লোজার - 480 অক্ষর

(use '[clojure.contrib.string :only (repeat)])(let [r ((fn p[%](repeatedly % #(let [x (read-line)](try(doall(p(Integer/parseInt x)))(catch Exception e x))))) 1)]((fn z[m,n,o] (let[b #( let[p(dec o)](println(str(repeat p "| ")%(repeat(- m(* 4 p)2)"-")%(repeat p " |"))))](b \.)(doseq[i n](if(seq? i)(z m i(inc o))(println(str(repeat o "| ")i(repeat(- m(count i)(* o 4))" ")(repeat o " |")))))(b \')))((fn w[x](reduce max(map(fn[%](if(seq? %)(+ (w %)4)(count %)))x)))r)(first r) 1))

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


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

আমি নিশ্চিত যে এটি সম্ভব ... যদিও আমি বলেছিলাম, আমি সম্ভবত এটি করবো না।
কেসি

2

সি # - 472 470 426 422 398 টি অক্ষর

using System.Linq;using y=System.Console;class W{static void Main(){var c=new int[5];var s=new string[0].ToList();int n=0,i;var l="";do{try{c[n]=int.Parse(l=y.ReadLine());l=".{1}.";n++;i=1;}catch{l+="{0}";i=0;}G:while(i++<n)l="| "+l+" |";s.Add(l);if(n>0&&--c[n-1]<0){n--;l="'{1}'";i=0;goto G;}}while(n>0);s.ForEach(z=>y.WriteLine(z,l="".PadLeft(s.Max(v=>v.Length)-z.Length),l.Replace(' ','-')));}}

খুশী হলাম। আ goto! যাইহোক, আপনি ল্যাম্বডা আর্গুমেন্টের চারপাশে প্রথম বন্ধনী বাদ দিতে পারেন zএবং vএটিকে 421 এ নামিয়ে আনতে পারেন
জয়ে

2

স্কালা - 475 অক্ষর

object N2 extends App{type S=String;def b(x:List[S],t:Int,s:S,e:S):List[S]={var l=x;o=o:+(s+".-±-."+e+"-");for(i<-1 to t)if(l.head.matches("\\d+"))l=b(l.tail,l.head.toInt,s+"| ",e+" |")else{o=o:+(s+"| "+l.head+"±"+e+" | ");l=l.drop(1)};o=o:+(s+"'-±-'"+e+"-");return l};var o:List[S]=List();val l=io.Source.stdin.getLines.toList;b(l.tail,l.head.toInt,"","");(o map(x=>x.replaceAll("±",x.last.toString*((o sortBy((_:S).length)).last.length-x.length)).dropRight(1)))map println}

1

সি # 1198 1156 1142 689 671 634 অক্ষর

using z=System.Console;using System.Collections.Generic;using System.Linq;
class T{bool U;List<T> a=new List<T>();string m;IEnumerable<string>R(int s){if(U){yield return ".".PadRight(s-1,'-')+".";foreach(var e in a.SelectMany(b=>b.R(s-4)))yield return ("| "+e).PadRight(s-e.Length)+" |";yield return "'".PadRight(s-1,'-')+"'";}else yield return m;}int L(){return U?a.Max(x=>x.L())+4:m.Length;}
static void Main(){var p=O(int.Parse(z.ReadLine()));z.WriteLine(string.Join("\r\n",p.R(p.L())));}
static T O(int n){var k=new T(){U=true};while(n-->0){var l=z.ReadLine();int c;k.a.Add(int.TryParse(l,out c)?O(c):new T{m=l});}return k;}}

1
অসম্পূর্ণ সংস্করণটি গিথুব - github.com/paulduran/ কোড কোডে গল্ফ
মারাত্মক

এর সাথে যোগ দেওয়া \nশেষ পর্যন্ত যথেষ্ট বলে মনে হচ্ছে।
জোয়

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

ভাল কাজ নিক। আমি সন্দেহ করি ইন্টারফেসটি কিছুটা ওভারকিল ছিল, সত্যি বলতে। আপনি যেমন দেখিয়েছেন তেমন একটি সাধারণ পতাকা এই পরিস্থিতিতে যথেষ্ট হবে।
মারাত্মক

0

পিপ , 89 বাইট (প্রতিযোগী নয়)

(ভাষাটি চ্যালেঞ্জের চেয়েও নতুন। এছাড়াও, আমি এপিএলকেও ছাড়িয়ে যেতে পারিনি))

কোডটি 87 বাইট, -rnপতাকাগুলির জন্য +2 ।

(z:{I+YPOi{Y{Vz}M,ym:MX#*Y$ALyY'|.s._.sX++m-#_.'|MyY".."J'-X++mALyAL"''"J'-Xm}yALl}i:g)

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

ফাংশন zইনপুট তালিকার প্রথম আইটেমটি প্রক্রিয়া করে ( gবিশ্বব্যাপী ভেরিয়েবলে অনুলিপি করে iযাতে ফাংশন কলগুলির অভ্যন্তরে উপলব্ধ থাকে)। যদি এটি একটি এন হয় , তবে এটি নিজেকে পুনরাবৃত্তভাবে n বার বলে, পুরো আয়তক্ষেত্রে রেখার ফলস্বরূপ তালিকাটি প্যাড করে, প্রতিটি লাইনকে জড়িয়ে দেয় এবং নতুন তালিকাটি ফেরানোর আগে লাইন "| " " |"যুক্ত করে .---.এবং '---'লাইনগুলি। যদি এটি একটি স্ট্রিং হয় তবে এটি এটিকে কেবল এক-আইটেমের তালিকায় রূপান্তর করে এটিকে ফেরত দেয়। চূড়ান্ত ফলাফলটি নিউলাইন-বিচ্ছিন্ন ( -nপতাকা) মুদ্রিত হয় । অনুরোধে আরও বিশদ উপলব্ধ।


আমার কাছে সাধারণত চ্যালেঞ্জের চেয়ে নতুন ভাষা নিয়ে সমস্যা হয় না, বিশেষত বিবেচনা করে যে সমস্যাটি এতটা তুচ্ছ নয় যে একটি সদ্য-নির্মিত ভাষার এটির সমাধানের জন্য বিশেষভাবে কাজ করা হবে :-)
জয়ে

এটি চতুর্থ নমুনা ব্যর্থ।
জোয়

0

জাভা (1369 অক্ষর সহ EOL গুলি)

জাভা বাস্তবায়ন ছাড়া এটি ছেড়ে যেতে পারেনি। জাভাটি আরও ভার্জোজ হওয়ার কথা যা পাইথন এবং রুবির স্লিকস, তাই আমি একটি মার্জিত, পুনরাবৃত্ত সমাধানের জন্য গিয়েছিলাম।

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

import java.io.*;import java.util.*;
public class N{private static String rPad(String s,int l){return s+str(l-s.length(),' ');}
private static String str(int l, char c){StringBuffer sb=new StringBuffer();while(l-->0){sb.append(c);}return sb.toString();}
private static class Box {Box prnt=null;String txt=null;int items;List<Box> c=new ArrayList<Box>();int maxLength=0;
public Box(Box p,int n){prnt=p;items=n;if(p!=null){p.c.add(this);}}
public Box(Box p,String s){prnt=p;txt=s;if(p!=null){p.c.add(this);p.notify(s.length());}}
public void print(String prefix,int l,String suffix){if (txt == null){System.out.println(prefix+"."+str(l-2,'-')+"."+suffix);for(Box b:c){b.print(prefix+"| ",l-4," |"+suffix);}System.out.println(prefix+"'"+str(l-2,'-')+"'"+suffix);}else{System.out.println(prefix+rPad(txt,l)+suffix);}}
protected void notify(int l){if (l+4>this.maxLength){this.maxLength=l + 4;if (this.prnt != null){this.prnt.notify(this.maxLength);}}}}
public static void main(String[] args)throws IOException{Box head=null;Box b=null;BufferedReader in=new BufferedReader(new InputStreamReader(System.in));String s;while ((s=in.readLine()) != null){try{int n=Integer.parseInt(s);b=new Box(b, n);}catch (NumberFormatException nfe){b=new Box(b, s);}if(head == null)head=b;while ((b != null) && (b.items == b.c.size())){b=b.prnt;}}head.print("",head.maxLength,"");}}

এটি সত্যিই লেখার একটি উপভোগযোগ্য সমাধান। আমি প্রশ্নটি অনেক পছন্দ করেছি। যেমনটি আমি আগেই উল্লেখ করেছি, আমি সমাধান কমনীয়তার জন্য গিয়েছিলাম ন্যূনতম পদ্ধতির নয়, দুঃখজনকভাবে জাভাতে পাইথনের মুদ্রণ নেই "-" * 4 "" ---- ":-)

এখানে অবারিত সংস্করণটি রয়েছে:

import java.io.*;
import java.util.*;

public class NestedBoxes
{

    private static String rPad ( String s, int l )
    {
        return s + str(l - s.length(), ' ');
    }

    private static String str ( int l, char c )
    {
        StringBuffer sb = new StringBuffer();
        while (l-- > 0)
        {
            sb.append(c);
        }
        return sb.toString();
    }

    private static class Box
    {

        Box parent = null;
        String text = null;
        int items;
        List<Box> contents = new ArrayList<Box>();

        int maxLength = 0;

        public Box ( Box p, int n )
        {
            parent = p;
            items = n;
            if (p != null)
            {
                p.contents.add(this);
            }
        }

        public Box ( Box p, String s )
        {
            parent = p;
            text = s;
            if (p != null)
            {
                p.contents.add(this);
                p.notify(s.length());
            }
        }

        public void print ( String prefix, int l, String suffix )
        {
            if (text == null)
            {
                System.out.println(prefix + "." + str(l - 2, '-') + "." + suffix);
                for (Box b : contents)
                {
                    b.print(prefix + "| ", l - 4, " |" + suffix);
                }
                System.out.println(prefix + "'" + str(l - 2, '-') + "'" + suffix);
            }
            else
            {
                System.out.println(prefix + rPad(text, l) + suffix);
            }
        }

        protected void notify ( int l )
        {
            if (l + 4 > this.maxLength)
            {
                this.maxLength = l + 4;
                if (this.parent != null)
                {
                    this.parent.notify(this.maxLength);
                }
            }
        }
    }

    public static void main ( String[] args ) throws IOException
    {
        Box head = null;
        Box b = null;
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String s;
        while ((s = in.readLine()) != null)
        {
            try
            {
                int n = Integer.parseInt(s);
                b = new Box(b, n);
            }
            catch (NumberFormatException nfe)
            {
                b = new Box(b, s);
            }

            if (head == null)
            {
                head = b;
            }

            while ((b != null) && (b.items == b.contents.size()))
            {
                b = b.parent;
            }
        }
        head.print("", head.maxLength, "");
    }
}

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