पारभासी बक्से ड्रा करें


15

नोट: एसई फ़ॉन्ट विचित्रता के कारण यहां स्ट्रिंग कला भयानक लग सकती है: पी :(

आयतों के कोनों का प्रतिनिधित्व करने वाले चार-टुपल्स की एक सूची को देखते हुए, उस क्रम में एक दूसरे पर पारभासी आयतें खींचें।

इस चुनौती के लिए, आपको शीर्ष-बाएँ कोने में सबसे छोटा समन्वय और दाईं ओर बढ़ने वाली x- अक्ष और नीचे की तरफ y- अक्ष का बढ़ना आवश्यक है।

एक आयत के ऊपरी-बाएँ और नीचे-दाएँ कोनों के चार-टूप्ले (x0, y0, x1, y1)या समन्वित जोड़े का (x0, x1, y0, y1)प्रतिनिधित्व करता है (x, y)(आप आयतों के लिए दो प्रारूपों में से किसी एक को चुन सकते हैं लेकिन यह सुसंगत होना चाहिए)

मुझे "पारभासी आयत" से क्या मतलब है? खैर, इस चुनौती के लिए, आप अंतरिक्ष चरित्र और अधिकांश बॉक्स-ड्राइंग पात्रों का उपयोग करेंगे; विशेष रूप से, सभी लोग "बोल्ड" पात्रों सहित आयतों को आकर्षित करते थे। जब एक पारभासी आयत खींची जाती है, तो अंतरिक्ष में मौजूद सभी पतली रेखाएँ गायब हो जाती हैं और सभी बोल्ड लाइनें पतली हो जाती हैं, और फिर आयत स्वयं बोल्ड लाइनों में खींची जाती है।

उदाहरण के लिए, यदि आप ऊपरी-बाएँ और फिर नीचे-दाएँ में एक आयत बनाते हैं, तो यह कुछ इस तरह दिख सकता है:

┏━━━━┓
┃    ┃
┃    ┃
┃ ┏━━╇━━┓
┃ ┃  │  ┃
┗━╉──┘  ┃
  ┃     ┃
  ┃     ┃
  ┗━━━━━┛

स्पष्ट होने के लिए, आयत के भीतर सख्ती से सभी पंक्तियों के लिए लाइनें हल्की (बोल्ड -> पतली -> कोई नहीं) होती हैं (उदाहरण के लिए, नीचे की ओर की पंक्तियों को शीर्ष किनारे के लिए प्रभावित किया जाता है लेकिन नीचे के किनारे को नहीं)।

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

प्रत्येक परीक्षण मामले के लिए, इनपुट की कुछ पंक्तियाँ दी जाएंगी, जिसके बाद यूनिकोड-आर्ट होगा।

0 0 5 5
5 5 10 10
3 3 7 7
2 2 8 8

┏━━━━┓     
┃    ┃     
┃ ┏━━╇━━┓  
┃ ┃┌─┴─┐┃  
┃ ┃│   │┃  
┗━╉┤   ├╊━┓
  ┃│   │┃ ┃
  ┃└─┬─┘┃ ┃
  ┗━━╈━━┛ ┃
     ┃    ┃
     ┗━━━━┛

14 5 15 9
13 2 15 16
6 4 15 11


             ┏━┓
             ┃ ┃
      ┏━━━━━━╇━┫
      ┃      │ ┃
      ┃      │ ┃
      ┃      │ ┃
      ┃      │ ┃
      ┃      │ ┃
      ┃      │ ┃
      ┗━━━━━━╈━┫
             ┃ ┃
             ┃ ┃
             ┃ ┃
             ┃ ┃
             ┗━┛

6 8 10 11
15 12 16 16
14 10 16 16
9 1 15 15

         ┏━━━━━┓ 
         ┃     ┃ 
         ┃     ┃ 
         ┃     ┃ 
         ┃     ┃ 
         ┃     ┃ 
         ┃     ┃ 
      ┏━━╉┐    ┃ 
      ┃  ┃│    ┃ 
      ┃  ┃│   ┌╊┓
      ┗━━╉┘   │┃┃
         ┃    │┠┨
         ┃    │┃┃
         ┃    │┃┃
         ┗━━━━╈┩┃
              ┗┷┛

अधिक परीक्षण मामलों को उत्पन्न करें!

नियम

  • इनपुट चार-टुपल्स की सूची के लिए किसी भी उचित प्रारूप में हो सकता है। इनपुट एक अनुक्रमित या (यानी ऊपरी-बाएं कोने से कोई भी हो सकता है या तो अक्ष के साथ शून्य से इंडैक्स हो सकता है (0, 0), (0, 1), (1, 0), (1, 1)
  • आउटपुट को यूनिकोड-आर्ट के रूप में वर्णित किया जाना चाहिए। आउटपुट में अग्रणी नई सुर्खियाँ नहीं हो सकती हैं और इसमें सबसे अधिक अनुगामी नईलाइन (अंतिम पंक्ति के बाद) हो सकती है। इस चुनौती के उद्देश्यों के लिए अनुगामी व्हाट्सएप की अनदेखी की जाएगी।

कोड-अंक

बोल्ड और हल्के क्षैतिज और ऊर्ध्वाधर पाइप रेंज में हैं [U+2500, U+2503]। विभिन्न कोने के पाइप रेंज में हैं [U+250C, U+251C)। तीन-सशस्त्र पाइप सीमा में हैं [U+251C, U+253C)। चार-सशस्त्र पाइप सीमा में हैं [U+253C, U+254C)। शेष पाइप जो मेरे कार्यक्रम में पाए जा सकते हैं, वे वास्तव में कभी भी उपयोग नहीं किए जाते हैं।


क्या यह वास्तव में आस्की कला है? रिक्त स्थान के अलावा, यह किसी भी एएससीआई पात्रों का उपयोग नहीं करता है।
caird coinheringaahing

@cairdcoinheringaahing ascii- कला जानकारी से,Typically this uses only 95 printable (from a total of 128) characters defined by the ASCII Standard from 1963.
पूरी तरह से


क्या हम यहाँ से चरित्र b / w 220 - 223 का उपयोग कर सकते हैं? बोल्ड लाइनों के लिए dochome.programbl.com/dochome/sites/default/files/image169.png
मुकुल कुमार

1
@ मुकुलकुमार नहीं, आपको उन सटीक पात्रों का उपयोग करना चाहिए। आपको वर्णों के पूरे सेट के किसी भी
क्रमिक प्रतिस्थापन के

जवाबों:


3

पायथन 3 , 289 286 बाइट्स

l,u=eval(input())
*_,w,h=map(max,zip(*l))
r=[*map(list,[' '*-~w]*-~h)]
R=range
for x,y,X,Y in l:
 for i in R(x,X+1):
  for j in R(y,Y+1):Q=i<X,y<j,x<i,j<Y;r[j][i]=u[sum(3**o*max(Q[o]*[j in(y,Y),i in(x,X)][o%2]*2,u.index(r[j][i])//3**o%3-Q[o])for o in R(4))]
for l in r:print(''.join(l))

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

4-ट्यूपल्स की सूची के रूप में इनपुट लेता है: (x0, y0, x1, y1)पाइपड्राइविंग वर्णों के साथ निम्नानुसार है:" ╶╺╵└┕╹┖┗╴─╼┘┴┶┚┸┺╸╾━┙┵┷┛┹┻╷┌┍│├┝╿┞┡┐┬┮┤┼┾┦╀╄┑┭┯┥┽┿┩╃╇╻┎┏╽┟┢┃┠┣┒┰┲┧╁╆┨╂╊┓┱┳┪╅╈┫╉╋"

शून्य चौड़ाई या ऊंचाई के बक्से का समर्थन करता है (सभी बॉक्स ड्राइंग वर्णों का उपयोग करता है)।

के आधार पर मेरा उत्तर करने के लिए इस सवाल का , लेकिन जब ड्राइंग बदलने मौजूदा बॉक्स करने के लिए संशोधित।

'Ungolfed':

u=" ╶╺╵└┕╹┖┗╴─╼┘┴┶┚┸┺╸╾━┙┵┷┛┹┻╷┌┍│├┝╿┞┡┐┬┮┤┼┾┦╀╄┑┭┯┥┽┿┩╃╇╻┎┏╽┟┢┃┠┣┒┰┲┧╁╆┨╂╊┓┱┳┪╅╈┫╉╋"

#Create array of spaces:
l=eval(input())
w,h=list(map(max,zip(*l)))[2:]
r=[[' ']*w for _ in' '*h]

for x,y,X,Y in l:
 n,m=X-1,Y-1
 for i in range(x,X):
  for j in range(y,Y):
   A,B=j in(y,m),i in(x,n)
   P=(i<n*A,y<j*B,x<i*A,j<m*B)   # Pipe sides of the new box
   Q=(i<n,y<j,x<i,j<m)           # Pipe sides that are inside the new box, and should be thinned.
   # Get new pipe (sides of new box, on top of thinned pipes of existing boxes. (u.index... is existing pipe))
   l=sum(3**o*max(P[o]*2,(u.index(r[j][i])//3**o%3)-Q[o])for o in range(4))
   #Add to 'canvas'
   r[j][i]=u[l]

print('\n'.join(''.join(l)for l in r))

आप uइनपुट के रूप में ले सकते हैं ।
हाइपरनेत्रिनो

@ हाइपर न्युट्रीनो धन्यवाद :)
TFeld

आप अपने अनावश्यक चर को अभिनीत करके एक बाइट को बचा सकते हैं, _,_,w,h=जिसके साथ बदल सकते हैं *_,w,h=
जोनाथन फ्रीच

साथ ही, आपके टपल असाइनमेंट को Qकिसी कोष्ठक की जरूरत नहीं है, Q=(i<X,y<j,x<i,j<Y);इसे Q=i<X,y<j,x<i,j<Y;दो बाइट्स के साथ बदला जा सकता है ।
जोनाथन फ्रीच

@JonathanFrech धन्यवाद :)
TFeld

2

जावास्क्रिप्ट (ईएस 6), 298 261 बाइट्स

(a,u,m=n=>[...Array(1+Math.max(...a.map(t=>t[n])))])=>m(3).map((_,j)=>m(2).map((_,i)=>u[a.reduce((c,[x,y,v,w])=>i<x|j<y|i>v|j>w?c:(g=n=>c-=c/n%3|0&&n,h=n=>c+=n*(2-(c/n%3|0)),[i>x&&9,i<v].map(j>y&j<w?g:h),[j>y&&3,j<w&&27].map(i>x&i<v?g:h),c),0)]).join``).join`\n`

जहां \nशाब्दिक न्यूलाइन चरित्र का प्रतिनिधित्व करता है। यूनिकोड आयतों के मेरे उत्तर के आधार पर । स्पष्टीकरण: रिक्त स्थान के एक सरणी को खींचने के लिए बनाया गया है। प्रत्येक रिक्त स्थान को इनपुट में सभी बक्से पर लूपिंग द्वारा संसाधित किया जाता है। बॉक्स के बाहर झूठ बोलने वाले वर्णों को अनदेखा किया जाता है, लेकिन किनारे या अंदर वालों को आगे संसाधित किया जाता है। चार पंक्ति खंडों में से प्रत्येक को एक चरित्र बनाने के लिए (प्रत्येक को 3 की शक्ति द्वारा दर्शाया गया है) फिर तीन संभावनाएं हैं; ए) खंड बॉक्स के ठीक बाहर स्थित है और इसे अनदेखा किया जाना चाहिए (3 की शक्ति के बजाय 0 के पैरामीटर को पास करके) बी) खंड बॉक्स के किनारे पर स्थित है और बोल्ड होना चाहिए ( hफ़ंक्शन को कॉल करके प्राप्त किया जाना चाहिए ) ग) खंड बॉक्स के अंदर स्थित है और इसे हल्का किया जाना चाहिए (प्राप्त कॉलिंग होना चाहिएgसमारोह)। फिर चरित्र को यूनिकोड स्ट्रिंग में अनुक्रमित किया जाता है। एक बार सभी बॉक्स संसाधित हो जाने के बाद सरणी फिर से नईलाइनों पर जुड़ जाती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.