ASCII- कला में एक साधारण कमरा बनाएं


15

एक कमरा जुड़ा हुआ आयतों से बना हो सकता है, उदाहरण के लिए एक एल-आकार का कमरा। इस तरह के कमरे को प्रत्येक आयत के आकार का वर्णन करने वाले आयामों की एक सूची द्वारा वर्णित किया जा सकता है।

मान लें कि आपके पास दो इनपुट सूची हैं। पहले में एक दूसरे के ऊपर खड़ी आयतों की चौड़ाई होती है। दूसरे में आयतों की ऊँचाई होती है।

एक उदाहरण के रूप में, इनपुट [4 6][3 2]6-बाई -2 आयत के शीर्ष पर 4-बाय -3 आयत होगा। नीचे दिया गया आंकड़ा इस आकृति को दर्शाता है। ध्यान दें कि दीवारों को "पतली" माना जाता है, इस प्रकार यह उस दीवार के बीच का स्थान है जो इनपुट द्वारा निर्धारित किया जाता है।

[4 6][3 2]
 ____
|    |
|    |
|    |_
|      |
|______|

चुनौती है: इनपुट के रूप में आयामों की एक सूची लें, और ASCII- कला के रूप में कमरे के आकार का उत्पादन करें। नमूना आंकड़ों में प्रारूप इस प्रकार होना चाहिए:

  • सभी क्षैतिज दीवारों को अंडरस्कोर का उपयोग करके दिखाया गया है
  • सभी ऊर्ध्वाधर दीवारों को सलाखों का उपयोग करके दिखाया गया है
  • ऐसी कोई दीवार नहीं होगी जहाँ आयतें जुड़ी हों
  • बाईं दीवार सीधी है
  • अधिक जानकारी के लिए, परीक्षण मामलों पर एक नज़र डालें

मान्यताओं आप कर सकते हैं:

  • सभी आयाम सीमा में हैं [1 ... 20]
    • सभी क्षितिज आयाम सम संख्याएँ हैं
  • आयतों की संख्या सीमा में होगी [1 ... 10]
  • केवल वैध इनपुट दिया गया है
  • वैकल्पिक इनपुट प्रारूप (आप इनपुट आयामों का क्रम तय कर सकते हैं, कृपया उत्तर में निर्दिष्ट करें)।

परीक्षण के मामलों:

[2][1]
 __
|__|

---

[4][2]
 ____
|    |
|____|

---

[2 6 2 4][2 2 1 3]
 __
|  |
|  |___
|      |
|   ___|
|  |_
|    |
|    |
|____|

---

[2 14 6 8 4 18 2 10 4 2][1 2 3 1 2 1 1 1 2 1]
 __
|  |___________
|              |
|       _______|
|      |
|      |
|      |_
|     ___|
|    |
|    |_____________
|   _______________|
|  |______
|     ____|
|    |
|   _|
|__|

आप इनपुट आयामों के क्रम को तय कर सकते हैं , क्या इसका मतलब है कि हम पंक्तियों और स्तंभों को स्वैप कर सकते हैं, और उन्हें उल्टा कर सकते हैं? इस तरह: आपका उदाहरण इनपुट प्रारूप: [2 14 6 8 4 18 2 10 4 2][1 2 3 1 2 1 1 1 2 1]-> (स्वैप और रिवर्स) -> मेरा इनपुट प्रारूप:[1 2 1 1 1 2 1 3 2 1][2 4 10 2 18 4 8 6 14 2]
डेवको

हां, यह ठीक है। :-)
स्टीवी ग्रिफिन

धन्यवाद। पता चला कि मुझे शायद उन्हें उलटने की ज़रूरत नहीं है, बस स्वैप करें।
दावको

जवाबों:


1

रेटिना, 169 150 113 बाइट्स

बाइट गिनती आईएसओ 8859-1 एन्कोडिंग मानती है।

\ D +
$ *
{+ R`1 (1 * ¶ [^ |] * (1 +))
$ 1¶ | $ 2 |
} `(¶। *) 1+
$ 1
1
_
(\ | _ +) \ | (? = ¶ \ 1 _ (_ +))
$ 1 | $ 2
T`w`` (\ | _ +) _? (? = _ * \ | | * ¶ \ 1)
^ ¶
 

कोड में एक अनुगामी न्यूलाइन पर एक अनुगामी स्थान होता है।

इनपुट प्रारूप:

ऊंचाई (रिक्त स्थान से अलग)
चौड़ाई (रिक्त स्थान से भी अलग)

उदाहरण के लिए:

1 2 3 1 2 1 1 1 2 1
2 14 6 8 4 18 2 10 4 2

इसे ऑनलाइन आज़माएं!


4

जावास्क्रिप्ट (ईएस 6) 174

एकमात्र महत्वपूर्ण हिस्सा विभिन्न चौड़ाई के 2 भागों को जोड़ने वाली क्षैतिज पंक्ति है, जिसके दाईं ओर ऊर्ध्वाधर पट्टी मध्य या दाईं ओर हो सकती है।

(p,h,q=-1,R=(n,s=' ')=>s.repeat(n))=>[...p,0].map((x,i)=>(x>q?p=x:(p=q,q=x),(~q?`
|`+R(q+(x<p)-!x)+R(x>q,'|'):' ')+R(p+~q+!x,'_')+R(x<p,'|')+R(h[i]-1,`
|${R(q=x)}|`))).join``

परीक्षा

f=(p,h,q=-1,R=(n,s=' ')=>s.repeat(n))=>[...p,0].map((x,i)=>(x>q?p=x:(p=q,q=x),(~q?`
|`+R(q+(x<p)-!x)+R(x>q,'|'):' ')+R(p+~q+!x,'_')+R(x<p,'|')+R(h[i]-1,`
|${R(q=x)}|`))).join``

// Less golfed

F=(p,h, q=-1, 
   R=(n,s=' ')=>s.repeat(n)
  )=>
  [...p, 0].map((x,i)=> (
    x>q? p=x : (p=q,q=x),
    (q>=0?`\n|`+R(q+(x<p)-!x)+R(x>q,'|'):' ')
    + R(p+~q+!x,'_') + R(x<p,'|')
    + R(h[i]-1,`\n|${R(q=x)}|`)
  )).join``

console.log=x=>O.textContent+=x+'\n'

;[  
  [[2],[1]],
  [[4],[2]],
  [[2, 6, 2, 4],[2, 2, 1, 3]],
  [[2, 14, 6, 8, 4, 18, 2, 10, 4, 2],[1, 2, 3, 1, 2, 1, 1, 1, 2, 1]]
].forEach(t=>{
  var w=t[0],h=t[1]
  console.log('['+w+'] ['+h+']\n'+f(w,h)+'\n')
})
<pre id=O></pre>


4

पायथन 3, 230 223 222 217 बाइट्स

def f(a):b=a[0]+[0];m=' _';print('\n'.join([' '+'_'*b[0]+' ']+['|'+' '*min(b[l],b[l+1])+m[b[l+1]<1]*(b[l]>b[l+1])+m[k]*(b[l]-b[l+1]-1)+'|'+m[k]*(b[l+1]-b[l]-1)for l,i in enumerate(zip(*a))for k in[0]*(i[1]-1)+[1]]))

उनकी मदद के लिए @StewieGriffin @KevinLau को धन्यवाद

परिणाम

>>> f([[2, 14, 6, 8, 4, 18, 2, 10, 4, 2],[1, 2, 3, 1, 2, 1, 1, 1, 2, 1]])
 __ 
|  |___________
|              |
|       _______|
|      | 
|      | 
|      |_
|     ___|
|    |             
|    |_____________
|   _______________|
|  |_______
|     _____|
|    |
|   _|
|__|

अर्धविराम! वे आपके असाइनमेंट को अलग करते हैं और आपको अवांछित इंडेंटेशन से बचाते हैं! ( a=1;b=2)
कैल्क्युलेटरलाइन

"विलेयोन"> समाधान
मैट

स्ट्रिंग अनुक्रमण! m=' _'के बजाय m=[' ','_']5 बाइट्स की तरह बचाता है।
वैल्यू इंक

3

रूबी 191

पहली बार गोल्फ, यह भी रूबी के साथ मेरा पहला दिन है, इसलिए शायद यह दुनिया में सबसे सुंदर चीज नहीं है, लेकिन यह क्या करेगा?

def f(x)
a=x[0]+[0]
puts" #{'_'*a[0]} "
for i in 0..x[1].length-1
n,m=a[i,2].sort
puts"|#{' '*a[i]}|\n"*(x[1][i]-1)+'|'+' '*n+(a[i+1]<1?'_':m>a[i]?'|':' ')+'_'*(m-n-1)+(n<a[i]?'|':'')
end
end
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.