ASCII कला 3D StreetView


29

इनपुट:

  1. आपको पूर्णांक की एक श्रृंखला मिलती है (स्टड या प्रॉम्प्ट के माध्यम से खिलाया जाता है)।
  2. इस श्रृंखला में पूर्णांक की प्रत्येक जोड़ी एक इमारत की WIDTH [वैध सीमा: 1..10] और ऊँचाई [वैध श्रेणी: 0..10] का प्रतिनिधित्व करती है।
  3. इनपुट का गठन अच्छी तरह से मान लें।

नमूना इनपुट (दूसरी पंक्ति केवल प्रदर्शन उद्देश्यों के लिए है):

1 2 1 1 1 0 2 4 1 3 1 2 2 1
WHWHWHWHWHWHWH

नमूना उत्पादन के अनुरूप:

                 ______
               / ______ / |
              | | | __
              | | / __ / |
     __ | | | | __
   / __ / | | | | / __ / |  
  | | | __ | | | | | ______
  | | / __ / | | | | | / ______ / |
  | | | | _ | | | | | |
  | _O_ | _o_ | / __ | _o _____ | _o_ | _o_ | _o _____ | /
  -------------------------------------  
 - - - - - - - - - - - - - 
-------------------------------------

नियम:

इमारते

  1. एक बुनियादी बिल्डिंग ब्लॉक इस तरह दिखता है (1 डब्ल्यू, 1 एच)
   __
 / __ / | (बेस क्यूब इस सवाल पर एक से उधार लिया गया है:
| | | http://stackoverflow.com/questions/1609702/code-golf-playing-cubes)
| ___ | /
  1. हमारा विचार है (अहम) ~ 3 डी ताकि पड़ोसी इमारतें दूसरों के हिस्सों को छिपा सकें। इमारतें 'तार्किक रूप से' बाईं ओर से दाईं ओर दी गई हैं।

  2. पहली इमारत दो स्थानों से पहले छोड़ी गई है।

  3. आप आधार क्यूब के आयामों के लिए WIDTH और HEIGHT को लागू करके हर इमारत को प्रस्तुत करते हैं (प्रदान किए गए नमूना आउटपुट पर एक नज़र डालें!)। संदर्भ के लिए: बाएं से दाएं 'दीवार' के लिए वर्णों की संख्या (डब्ल्यू> 1 के साथ एक इमारत के लिए): (डब्ल्यू * 5) - (डब्ल्यू -1)।

  4. ऊँचाई वाली बिल्डिंग> 0 में एक दरवाजा होता है (जो वर्ण द्वारा दर्शाया गया है oऔर 'नीचे' पंक्ति पर 'बाईं' दीवार से दो वर्णों पर स्थित है)।

रास्ता:

  1. सड़क में तीन भाग होते हैं जिन्हें हम 'टॉप', 'मिडल' और 'बॉटम' कहेंगे।
  2. The शीर्ष ’भाग और 'नीचे’ भाग इस तथ्य से अलग हैं कि part शीर्ष ’भाग दो स्थानों से पहले है।
  3. मध्य भाग एक स्थान से पहले का है और निम्नलिखित पैटर्न की पुनरावृत्ति शामिल है:
    '-'
  4. लंबाई को संयुक्त इमारतों की कुल चौड़ाई से निर्धारित किया जाना है: सड़क का सबसे दाहिना हिस्सा 'अंतिम' इमारत की 'सही' दीवार की स्थिति से मेल खाता है।

विजेता:

यह कोड-गोल्फ है! विजेता कम से कम समाधान (स्रोत कोड गणना द्वारा) के साथ योग्य प्रतियोगी है। स्रोत में केवल मुद्रण योग्य ASCII वर्ण शामिल होने चाहिए। मज़े करो!

(यादृच्छिक) खिड़कियों, कारों या पैदल यात्रियों के लिए काल्पनिक बोनस अंक।

यदि विनिर्देशों स्पष्ट नहीं हैं तो टिप्पणी करने के लिए स्वतंत्र महसूस करें!


@user अज्ञात: वास्तव में नियमों में एक छोटा टाइपो था। अब तय किया जाना चाहिए, धन्यवाद!
क्रिस्तोफेड

अनुगामी व्हाट्सएप की अनुमति है? आपको लगता है कि उदाहरण में कुछ है, इसलिए मैं ऐसा मानता हूं।
पीटर टेलर

@ पेटर टेलर: अनुगामी व्हाट्सएप की अनुमति है।
क्रिस्तोफीडी

सड़क भाग 3, कि '-  '(दो रिक्त स्थान के साथ) होना चाहिए ? संपादित करें : आह, दो रिक्त स्थान नहीं दिखाते हैं: P। आप ASCII 255 (नॉन-ब्रेकिंग स्पेस, ALT + 255 को numpad पर) का उपयोग करके या मेरी टिप्पणी से कॉपी और पेस्ट करके कई स्थान प्रदर्शित कर सकते हैं। Orr ... आप इसके बजाय सिर्फ यह कह सकते हैं कि यह पुनरावृत्ति है ' - ':)
mellamokb

ऐसा लगता है कि ऊंचाई मान्य सीमा वास्तव में [ 0 ..10] है। 3 में भी आपका क्या मतलब है but you must not enforce this)? IMO, किसी भी धारणा का फायदा उठाने के लिए उपलब्ध है अगर यह आपके स्कोर को बढ़ाता है। इसलिए मैं कोड लिख सकता हूं जो केवल तभी काम करता है जब कुल चौड़ाई 80 से कम हो अगर मैं एक निचली वर्ण गणना को निचोड़ सकता हूं। उदाहरण के लिए, 80 की चौड़ाई के साथ एक डिस्प्ले बफर सरणी में आउटपुट लिखना, इसलिए यह किसी भी उच्च कुल चौड़ाई पर क्रैश हो जाएगा। यदि आप किसी भी चौड़ाई का समर्थन करना चाहते हैं, तो यह अनुमान न दें - आपके पास दोनों नहीं हो सकते हैं: P
mellamokb

जवाबों:


10

हास्केल, 396 वर्ण

w&h=take h((3," /|"++(w-3)#'_'++"o_|"):c[(3,"| |"++(w-1)#s++"|")])++[(2,"|/ "++(w-2)#'_'++"/"),(0,"  "++(w-2)#'_')]++c[(0,w#s)]
p(w,h)=r.z take[sum w+k|k<-[1..]]$([c"-",s:c"-  ","  "++c"-"]++).map r.foldl(z(%))((2+maximum h)#(5#s))$z(&)w h
main=interact$unlines.p.q.map read.words;y%(d,x)=x++drop d y;q(x:y:z)=(4*x:a,2*y:b)where(a,b)=q z
q x=(x,x);(#)=replicate;c=cycle;r=reverse;z=zipWith;s=' '

उदाहरण आउटपुट:

$ runghc Streetview.hs <<< "1 1 1 3 1 2 1 0 2 4 2 2 1 3 3 1"
                     ______                          
                   /______ /|                        
         __       |       | |        __              
       /__ /|     |       | |      /__ /|            
      |   | |__   |       | |_____|   | |            
      |   |/__ /| |       |/______|   | |            
     _|   |   | | |       |       |   | |__________  
   /__|   |   | | |       |       |   |/__________ /|
  |   |   |   | |_|       |       |   |           | |
  |_o_|_o_|_o_|/__|_o_____|_o_____|_o_|_o_________|/
  -------------------------------------------------
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
-------------------------------------------------

5
+1 codegolf.se पर आपके हाल ही के हेमसेल सबमिशन ने हैक्सेल के बारे में थोड़ा और जानने के लिए मुझमें रुचि पैदा की है। समाधान के रूप में लघु, वे अभी भी काफी 'पठनीय' imho रह सकते हैं।
क्रिस्टोफ़ेड

8

अजगर, 415 वर्ण

I=eval(raw_input().replace(' ',','))
X=I[::2]
Y=I[1::2]
W=4*sum(X)+6
H=2*max(Y)+2
A=W*H*[' ']
p=W*H-W+2
for w,h in zip(X,Y):i=2*h;j=4*w;q=p-i*W;r=p+j;s=q+j;A[p+1:q+1:-W]=A[p+2:q+2:-W]=i*' ';A[p:q:-W]=A[r:s:-W]=A[r+2-W:s+2-W:-W]=i*'|';A[p+1:r]='_'*(j-1);A[q+2:s]=A[q+3-W:s+1-W]='_'*(j-2);A[q+1]=A[s+1]=A[r+1]='/';A[p+2]='_o'[h>0]; p+=j
A[W-1::W]='\n'*H
D=(W-5)*'-'
print''.join(A)+'  '+D+'\n'+(' - '*W)[:W-4]+'\n'+D

इमारत के सभी हिस्सों को खींचने के लिए स्लाइस का उपयोग करता है।

$ echo "1 2 1 1 1 0 2 4 1 3 1 5 2 1" | ./streetview.py 
                             __          
                           /__ /|        
                 ______   |   | |        
               /______ /| |   | |        
              |       | |_|   | |        
              |       |/__|   | |        
     __       |       |   |   | |        
   /__ /|     |       |   |   | |        
  |   | |__   |       |   |   | |______  
  |   |/__ /| |       |   |   |/______ /|
  |   |   | |_|       |   |   |       | |
  |_o_|_o_|/__|_o_____|_o_|_o_|_o_____|/ 
  -------------------------------------
 -  -  -  -  -  -  -  -  -  -  -  -  -
-------------------------------------

+1 बहुत अच्छा। समाधान पहले से ही बहुत सुंदर दिखता है ;-)
क्रिस्टोफ़ेड

2
`P + = j` (लंबी लाइन के अंत में) में एक खोई हुई जगह है। यकीन नहीं होता अगर आप उस एक की गिनती करते हैं ;-)
ChristopheD
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.