पायथन 3.5, 328 326 313 305 295 248 बाइट्स
( तीखे बयानों के आकार को कम करने के बारे में टिप के लिए केविन लाउ के लिए धन्यवाद ! )
def s(w,h,d):R,M=range,max;S,V,L=' |/';O=w-2;D=d-M(0,d-h);Q=h-M(0,h-d);print('\n'.join([S*(d-i)+L+' -'[i<1]*O+L+S*[h-1,i][i<=D-1]+'/|'[i<=D-1]for i in R(D+M(0,d-h))]+[V+[' -'[i==h],'_'][i<2]*O+V+S*[i-1,d][i>Q]+'/|'[i>Q]for i in R(Q+M(0,h-d),0,-1)]))
के क्रम में 3 पूर्णांक के रूप में इनपुट लेता है width, height, depth। जहाँ भी मैं कर सकता हूँ समय के साथ अधिक गोल्फ जाएगा।
इसे ऑनलाइन आज़माएं! (Ideone)
स्पष्टीकरण:
इस स्पष्टीकरण के प्रयोजनों के लिए, मान लें कि फ़ंक्शन को तर्कों के साथ निष्पादित किया गया था (3,2,3) जहां 3 की चौड़ाई ( w), 2 की ऊंचाई ( h) है, और 3 की गहराई ( d) है। कहा जा रहा है, मुझे पूरे समारोह का मुख्य भाग दिखाते हुए शुरू करें:
'\n'.join([S*(d-i)+L+' -'[i<1]*O+L+S*[h-1,i][i<=D-1]+'/|'[i<=D-1]for i in R(D+M(0,d-h))]+[V+[' -'[i==h],'_'][i<2]*O+V+S*[i-1,d][i>Q]+'/|'[i>Q]for i in R(Q+M(0,h-d),0,-1)])
यहां, दो सूचियां जो पूरे "घर" को बनाती हैं और फिर शाब्दिक नई लाइनों ( \n) द्वारा एक साथ जुड़ जाती हैं । चलो उन्हें क्रमशः सूची aऔर सूची कहते bहैं, और उनमें से प्रत्येक का विश्लेषण करते हैं:
यहां सूची aबनाई गई है:
[S*(d-i)+L+' -'[i<1]*O+L+S*[h-1,i][i<=D-1]+'/|'[i<=D-1]for i in R(D+M(0,d-h))]
इस सूची में dघर की पहली लाइनें शामिल हैं । यहां, iउस श्रेणी में प्रत्येक संख्या 0=>(d-(d-h))+d-hजहां d-h=0नकारात्मक या शून्य हो। शुरू करने के लिए, d-iरिक्त स्थान सूची में जोड़े जाते हैं, उसके बाद ए/ और फिर एक संपीड़ित सशर्त विवरण द्वारा वापस किया जाता है। इस सशर्त विवरण में, w-2यदि रिक्त स्थान की संख्या दी गई है i>1। अन्यथा उसी संख्या -को वापस कर दिया जाता है। फिर, इनका अनुसरण दूसरे द्वारा किया जाता है /, और फिर रिक्त स्थान, जहां रिक्त स्थान की संख्या अब इस बात पर निर्भर करती है कि नहीं i<=d-(d-h)-1। यदि यह है, तो iरिक्त स्थान जोड़े जाते हैं। अन्यथा,h-1 रिक्त स्थान जोड़े जाते हैं। अंत में, यह सब एक /या एक से सबसे ऊपर है |, जहां |अगर i<=d-(d-h)-1, अन्यथा जोड़ा जाता है/जोड़ दिया गया है। 3x2x3प्रिज्म के इस मामले में , यह सूची द्वारा लौटा दी जाएगी a:
/-/|
/ / |
/ / /
यहां सूची bबनाई गई है:
[V+[' -'[i==h],'_'][i<2]*O+V+S*[i-1,d][i>Q]+'/|'[i>Q]for i in R(Q+M(0,h-d),0,-1)]`
इस सूची में प्रिज्म की बाकी लाइनें हैं। इस सूची में, iप्रत्येक श्रेणी में पूर्णांक है (h-(h-d))+h-d=>0जहां h-d=0यदि नकारात्मक या शून्य है। इस सूची को बंद करने के लिए, सबसे पहले एक |जोड़ा जाता है क्योंकि ये लाइनें हमेशा एक के साथ शुरू होती हैं |। फिर, या तो एक स्थान, -या _जोड़ा जाता है या नहीं i=hया नहीं, इसके आधार पर i<2। यदि i<2, तो एक _जोड़ा जाता है। अन्यथा, एक -जोड़ा जाता है अगर i=h, या एक स्थान जोड़ा जाता है अगरi>h या i<hया i>2। इस निर्णय के बाद, फिर w-2चुने गए चरित्र की संख्या जोड़ दी जाती है। इसके बाद, एक |और जोड़ा जाता है, और फिर या तोi-1 या dस्थानों की संख्या जोड़ रहे हैं। यदिi>h-(h-d) , तो एdरिक्त स्थान की संख्या को जोड़ा जाता है। अन्यथा,i-1रिक्त स्थान की संख्या को जोड़ा जाता है। अंत में, यह |या तो एक या एक के साथ सबसे ऊपर है/, जिसमें एक |जोड़ा जाता है अगर i>h-(h-d), या /अगर जोड़ा गया है i<=h-(h-d)। 3x2x3प्रिज्म के मामले में , सूची bरिटर्न:
|-| /
|_|/
2 सूचियाँ बनाए जाने के बाद, वे अंततः शाब्दिक नई लाइनों ( \n) का उपयोग करके जुड़ गए हैं '\n'.join()। यह आपका पूरा किया हुआ प्रिज्म है, और इस मामले में, इस तरह दिखाई देगा:
/-/|
/ / |
/ / /
|-| /
|_|/