ASCII বক্স রেন্ডারিং


11

কার্য

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

ইনপুট

আপনাকে সংখ্যার একটি তালিকা দেওয়া হবে। বিন্যাস এখানে আপনি যে কোন deliminator যদি আপনি চান ব্যবহার করতে পারেন যে একটি বিট নমনীয়, (যেমন 1,2,3,4, 1 2 3 4, [1,2,3,4])। তালিকাটি 4 টি গ্রুপে রয়েছে এবং xywhপ্রতিটি বাক্সের নির্দিষ্ট করে । প্রতিটি বাক্সের প্রস্থ এবং উচ্চতা কমপক্ষে 2 হবে xএবং widthবাম থেকে ডানদিকে থাকবে। yএবং heightউপরে থেকে নীচে হয়।

আউটপুট

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

ওভারল্যাপিং বাক্সগুলি কীভাবে পরিচালনা করবেন

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

শৈলী

বাক্সগুলির শৈলী মোটামুটি মানের, +কোণগুলির -জন্য ব্যবহৃত , অনুভূমিক রেখার |জন্য ব্যবহৃত হয় এবং উল্লম্ব রেখার জন্য ব্যবহৃত হয়।

উদাহরণ:

( >>>ইনপুট বোঝায়)

>>>0 0 11 4 7 2 8 4 3 5 8 3
+---------+
|         |
|         |---+
+---------+   |
       |      |
   +---+------+
   |      |
   +------+


>>>0 3 11 4 7 5 8 4 3 8 8 3 4 0 13 5
    +-----------+
    |           |
    |           |
+---------+     |
|         |-----+
|         |---+
+---------+   |
       |      |
   +---+------+
   |      |
   +------+


>>>0 0 2 2
++
++


>>>2 2 5 3 1 1 7 5 0 0 9 7
+-------+
|+-----+|
||+---+||
|||   |||
||+---+||
|+-----+|
+-------+

>>>0 0 3 3 2 0 3 3
+-+-+
| | |
+-+-+

মাঝেরটি কি 4 0 13 5তার চেয়ে বেশি হওয়া উচিত নয় 0 4 13 5?
নীল

প্রথম 2 ক্ষেত্রে নীচ থেকে দ্বিতীয় আয়তক্ষেত্রে x = 7 রয়েছে (x = 0 আয়তক্ষেত্রের সাথে সামঞ্জস্যপূর্ণ)
স্তর নদী সেন্ট

1
লক্ষ্য করার জন্য ধন্যবাদ, আমি খুব কমই আমার প্রশ্নের উত্তর লিখি, এবং তাই এই সমস্ত হাত দিয়ে ...
জে আতকিন

@ জ্যাটিন আমি দুঃখিত, আমি এটি মিস করেছি missed
কনার ও'ব্রায়ান

এটি ঠিক আছে, পড়ার সময় আমি প্রায়শই জিনিসগুলি মিস করি;)
জে আতকিন

উত্তর:


4

এপিএল, 116 বাইট

{⎕IO←0⋄K←' '⍴⍨⌽+⌿2 2⍴⌈⌿↑⍵⋄K⊣{x y W H←⍵-⌊.5×⍳4⋄K[Y←y+⍳H;X←x+⍳W]←' '⋄K[Y;A←x+0 W]←'|'⋄K[B←y+0 H;X]←'-'⋄K[B;A]←'+'}¨⌽⍵}

এটি এমন একটি ফাংশন যা অ্যারের অ্যারে নেয় এবং একটি অক্ষর ম্যাট্রিক্স দেয়।

পরীক্ষা:

      t1← (0 0 11 4)(8 2 8 4)(3 5 8 3)
      t2← (0 3 11 4)(8 5 8 4)(3 8 8 3)(4 0 13 5)
      t3← (⊂0 0 2 2)
      t4← (2 2 5 3)(1 1 7 5)(0 0 9 7)
      {⎕IO←0⋄K←' '⍴⍨⌽+⌿2 2⍴⌈⌿↑⍵⋄K⊣{x y W H←⍵-⌊.5×⍳4⋄K[Y←y+⍳H;X←x+⍳W]←' '⋄K[Y;A←x+0 W]←'|'⋄K[B←y+0 H;X]←'-'⋄K[B;A]←'+'}¨⌽⍵} ¨ t1 t2 t3 t4
┌───────────────────┬─────────────────────┬────┬───────────┐
│+---------+        │    +-----------+    │++  │+-------+  │
│|         |        │    |           |    │++  │|+-----+|  │
│|         |----+   │    |           |    │    │||+---+||  │
│+---------+    |   │+---------+     |    │    │|||   |||  │
│        |      |   │|         |-----+    │    │||+---+||  │
│   +----+------+   │|         |----+     │    │|+-----+|  │
│   |      |        │+---------+    |     │    │+-------+  │
│   +------+        │        |      |     │    │           │
│                   │   +----+------+     │    │           │
│                   │   |      |          │    │           │
│                   │   +------+          │    │           │
│                   │                     │    │           │
│                   │                     │    │           │
└───────────────────┴─────────────────────┴────┴───────────┘

ব্যাখ্যা:

  • ⎕IO←0: সূচক উত্স সেট করুন 0
  • সঠিক আকারের একটি ম্যাট্রিক্স তৈরি করুন:
    • ⌈⌿↑⍵: এক্স, ওয়াই, ডাব্লু এবং এইচ এর জন্য বৃহত্তম মানগুলি সন্ধান করুন
    • +⌿2 2⍴: x + w এবং y + h
    • K←' '⍴⍨⌽: x + w * y + h স্পেসের একটি ম্যাট্রিক্স তৈরি করুন এবং এতে সঞ্চয় করুন K
  • এতে বাক্সগুলি আঁকুন:
    • {... }¨⌽⍵: প্রতিটি বাক্সের জন্য, বিপরীত ক্রমে,
      • x y W H←⍵-⌊.5×⍳4: থেকে স্থানাঙ্ক নির্ধারণ x, y, W, এবং H, এবং উভয় থেকে 1 বিয়োগ Wএবং H। (স্থানাঙ্কগুলি একচেটিয়া, এপিএল অ্যারে রেঞ্জগুলি অন্তর্ভুক্ত))
      • K[Y←y+⍳H;X←x+⍳W]←' ': ফাঁকা স্থান সহ বর্তমান বাক্সটি পূরণ করুন
      • K[Y;A←x+0 W]←'|': উল্লম্ব দিক আঁকুন
      • K[B←y+0 H;X]←'-': অনুভূমিক দিকগুলি আঁকুন
      • K[B;A]←'+': প্রান্তগুলি '+' তে সেট করুন
    • K⊣: পরে, ফিরে K

1
বহিরাগতের কাছে এপিএল এমন এক অদ্ভুত
চেহারাবার

3

ES6, 228 223 217 208 201 198 বাইট

স্থানাঙ্কগুলির একটি অ্যারের গ্রহণ করে এবং একটি স্ট্রিং প্রদান করে returns

a=>a.reverse().map(([x,y,w,h])=>[...Array(y+h)].map((_,i)=>(s=r[i]||'',r[i]=i<y?s:(s+' '.repeat(x)).slice(0,x)+(c=>c[0]+c[1].repeat(w-2)+c[0])(y-i&&y+h-1-i?'| ':'+-')+s.slice(x+w))),r=[])&&r.join`\n`

যেখানে \nএকটি নতুন লাইনের চরিত্র উপস্থাপন করে।

সম্পাদনা করুন: আমার শর্তগুলি ফিরিয়ে দিয়ে 5 টি বাইট সংরক্ষণ করা হয়েছে। চর অ্যারে থেকে অ্যারে থেকে স্ট্রিংয়ের অ্যারেতে পরিবর্তন করে আরও 6 বাইট সংরক্ষণ করা হয়েছে। একটি অস্থায়ী পরিবর্তনশীল প্রবর্তন করে আরও 9 বাইট সংরক্ষণ করা হয়েছে। সহায়ক ফাংশন প্রবর্তন করে আরও 7 বাইট সংরক্ষণ করা হয়েছে। পূর্ববর্তী সঞ্চয়টি পূর্বাবস্থায় রেখে আরও 3 টি বাইট সংরক্ষণ করা হয়েছে!


3

রুবি, 153 143

->n{a=(0..m=3*n.max).map{$b=' '*m}
(*n,x,y,w,h=n 
v=w-2
h.times{|i|a[y+i][x,w]=i%~-h<1??++?-*v+?+:?|+' '*v+?|}
)while n[0]
a.delete($b);puts a}

পরীক্ষা প্রোগ্রামে অসম্পূর্ণ

f=->n{                                #worst case width when x=w=large number, is max input*2+1
  a=(1..m=3*n.max).map{$b=' '*m}      #find m=max value in input, make an a array of 3*m strings of 3*m spaces 
  (
    *n,x,y,w,h=n                      #extract x,y,w,h from the end of n, save the rest back to n     
    v=w-2                             #internal space in rectangle is w-2  
    h.times{|i|                       #for each row
      a[y+i][x,w]=                    #substitute the relevant characters of the relevant lines of a 
      i%~-h<1?                        #i%~-h = i%(h-1). This is zero (<1) for first and last lines of the rectangle
      ?+ + ?-*v + ?+ :?| + ' '*v +?|  # +--...--+ or |  ...  | as required
    }
  )while n[0]                         #loop until data exhausted (n[0] becomes falsy as it does not exist)
a.delete($b);puts a}                  #delete blank rows ($b is a global variable) and display

3

স্মাইলব্যাসিক, 128 125 বাইট

DEF B A
WHILE LEN(A)H=POP(A)W=POP(A)-2Y=POP(A)X=POP(A)FOR I=0TO H-1LOCATE X,Y+I?"+|"[M];"- "[M]*W;"+|"[M]M=I<H-2NEXT
WEND
END

স্ক্রিনশট (ক্রপড)

স্ক্রিনশট স্ক্রিনশট স্ক্রিনশট স্ক্রিনশট স্ক্রিনশট

ব্যাখ্যা

DEF B A 'make a function and add 12 bytes :(
 WHILE LEN(A) 'repeat until array is empty
  H=POP(A):W=POP(A)-2 'get width/height
  Y=POP(A):X=POP(A) 'get x/y
  FOR I=0 TO H-1 'draw one row at a time
   LOCATE X,Y+I 'position the cursor
   PRINT "+|"[M]; 'draw left edge
   PRINT "- "[M]*W; 'draw middle
   PRINT "+|"[M] 'draw right edge
   M=I<H-2
  NEXT
 WEND
END

Mএটি বাক্সের প্রথম / শেষ সারিতে রয়েছে কিনা তা সঞ্চয় করে ( 0= +--+, 1= | |)। লুপ দিয়ে প্রথম পাসে M0 হয় এবং শেষ অবধি অন্য সকলের কাছে এটি 1 হয়।


এটি বেশ সুন্দর :)
জে আত্কিন


1

পাইথ, 162 145 বাইট

J\+K*h.MZm+@d1@d3Q]*h.MZm+@d0@d2QdD:GHb XKHX@KHGb;V_QDlTR@NTVl3Vl2:+l0b+l1H?|qHtl3qH0\-?|qbtl2qb0\|d)):l0l1J:+l0tl2l1J:l0+l1tl3J:+l0tl2+l1tl3J;jK

আপনি এটি এখানে চেষ্টা করতে পারেন

পরীক্ষার স্যুট আউটপুট:

+---------+     
|         |     
|         |----+
+---------+    |
        |      |
   +----+-+----+
   |      |     
   +------+     

++
++

+-------+
|+-----+|
||+---+||
|||   |||
||+---+||
|+-----+|
+-------+

+-+-+
| | |
+-+-+

ভয়াবহ সমাধান! কেউ অপেক্ষা করছে এটি মারবে


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