PowerShell v2 +, 217 205 190 187 184 बाइट्स
param($b)"_"*(($a=[math]::Abs($b))*4);$z,$y='/\'[($b=$b-lt0),!$b]
((($x=1..$a|%{($w=" "*($_-1))+$z+" "*(2*($a-$_))+$y+(' ','_')[$_-eq$a]*($a*2-1)+$y+$w})|%{-join$_[($a*4)..0]}),$x)[$b]
$b
एक पूर्णांक के रूप में इनपुट लेता है । ध्यान दें कि यदि $b
ऋणात्मक है, तो आपको इसे उचित तरीके से (उदाहरण देखें) कास्ट करने के लिए इसे स्पष्ट रूप से पार्स के साथ घेरने की आवश्यकता है, अन्यथा PowerShell को लगता है कि यह एक स्ट्रिंग है।
चाहे जिस दिशा में तम्बू का सामना करना पड़ रहा हो, पहली पंक्ति समान होती है, अंडरस्कोर का एक गुच्छा; वास्तव में 4*abs(input)
उनमें से कई, वास्तव में। उस नंबर को $a
बाद में उपयोग के लिए भी संग्रहीत किया जाता है । साथ ही, अब हम का निरपेक्ष मान है कि $b
में संग्रहीत $a
है, हम बारी $b
अपने हस्ताक्षर के लिए एक बूलियन में, और हमारे स्लैश में संग्रहीत चुनें $y
और $z
।
अगली पंक्ति आउटपुट का निर्माण और निर्माण कर रही है, और यह एक डोज़ी है, इसलिए इसे नीचे तोड़ दें।
हम अनिवार्य रूप से दो तत्वों की एक सरणी में अनुक्रमण कर रहे हैं, (big long calculations saved into $x)
या $x
, के आधार पर $b
।
गणनाएं हैं जहां तम्बू शरीर का निर्माण किया जाता है। हम पाश से 1..$a|%{...}
। प्रत्येक पुनरावृत्ति हम तम्बू शरीर की एक पंक्ति का निर्माण कर रहे हैं। हम पंक्ति # के बराबर कई स्थानों से शुरू करते हैं -1
, ताकि हम उचित रूप से बाएं-संरेखित हों। इसे $w
बाद में के लिए संग्रहीत किया जाता है, और उपयुक्त स्लैश ($ z, के आधार पर $b
) के साथ, तब रिक्त स्थान की डोरफ्रेम संख्या, फिर दूसरे स्लैश $y
, या तो अंडरस्कोर या रिक्त स्थान पर निर्भर करता है कि हम नीचे की रेखा पर हैं या नहीं। फिर एक और स्लैश $y
, और अंत में $w
आयताकार स्ट्रिंग के निर्माण के लिए अनुगामी रिक्त स्थान ( ) की उपयुक्त संख्या । जिसके परिणामस्वरूप स्ट्रिंग को सरणी में संग्रहीत किया जाता है $x
।
सरणी के बाईं आधा चुना जाता है (यानी, $b
है False
, तो हम के माध्यम से लूप करने की आवश्यकता है के बाद से इनपुट सकारात्मक था) $x
और प्रत्येक लाइन आइटम रिवर्स - इस जगह है जहाँ अवांछित स्पेस भूमिका निभाते हैं; यह हमें दूरियों की पुन: गणना करने के बजाए लाइनों को उलटने की अनुमति देता है।
यदि $b
है True
, तो $x
इसके बजाय सरणी का दायां भाग चुना जाता है।
या तो मामले में, पाइपलाइन में अब एक सरणी होती है। Write-Output
तत्वों के बीच डिफ़ॉल्ट न्यूलाइन के साथ, कार्यक्रम के पूरा होने पर निहित उत्पादन होता है।
उदाहरण
PS C:\Tools\Scripts\golfing> .\print-upside-down-tent.ps1 (-5)
____________________
\ / /
\ / /
\ / /
\ / /
\/_________/
PS C:\Tools\Scripts\golfing> .\print-upside-down-tent.ps1 (4)
________________
\ \ /
\ \ /
\ \ /
\_______\/
3
उदाहरण के लिए इनपुट के लिए 12 लंबाई (एक आयत) के चार तारों का उत्पादन कर सकते हैं ?